C++之类和对象(上)02

一、this指针

1.1.引入

上一节中,Date类有Init和Print两个成员函数,d1和d2同时调用了Init和Print函数,那么是如何访问d1对象和d2对象的呢?在这里C++给了有一个隐含的this指针来解决问题。

1.2.如何实现的?

编译器编译后,类的成员函数默认会在形参的第一个位置,增加一个当前类型的指针,叫做this 指针。例如void Print(Date*const this,int year,int month,int day)

1.3.成员函数如何访问成员变量

类的成员函数访问成员变量,本质上是通过this指针访问的,例如Init中的this->year=year;

1.4.C++规定的this指针使用限制

C++规定不能在实参和形参的位置显示地写this指针,但是可以在函数体内显示地使用this指针

例如:

void Init(int year,int month,int day){

this->_year=year;

this->_month=month;

this->_day=day;

}

1.5.思维导图

二、类的默认成员函数

2.1.什么是类的默认成员函数?

默认成员函数是指用户没有显示实现,编译器会自动生成的成员函数。

2.2.默认成员函数的分类

三、构造函数

3.1.什么是构造函数?

构造函数是一类特殊的成员函数。

3.2.构造函数的作用

构造函数的主要作用是对象实例化时初始化对象。可以替代我们之前写的Stack和Date类中Init函数的功能。

3.3.构造函数的特点

a.函数名与类名相同

b.无返回值

c.对象实例化时系统会自动调用对应的构造函数

d.构造函数可以重载

e.如果类中没有显式定义构造函数,则C++编译器会⾃动⽣成⼀个⽆参的默认构造函数,⼀旦⽤⼾显 式定义编译器将不再⽣成。
总结: 大多数情况下,构造函数需要我们自己去实现,少数情况类似MyQueue且stack有默认构
造时,MyQueue自动生成就可以用
f.无参构造函数、全缺省构造函数、我们不写编译器默认生成的构造函数,都叫做默认构造函数。注意这三个函数有且仅有一个存在,不能同时存在。

d.我们不写,编译器默认生成的构造,对内置类型(如:int/char/double/指针等)成员变量的初始化没有要求,是否初始化看编译器,对于自定义类型(我们使⽤class/struct等关键字⾃⼰定义的类型。)成员变量,要调用这个成员变量的默认构造函数初始化。

思维导图如下:

相关推荐
WL学习笔记4 小时前
类和对象(下)
c++·类和对象
傲世仙尊5 小时前
拷贝构造-传值传参的连锁反应与隐式函数的三个局限
c++
垆边人似月.5 小时前
华为机试题 :最大数
c++·算法·华为
方便面不加香菜6 小时前
C++ 关于多态的知识点讲解
开发语言·c++
jimy16 小时前
C++ 类成员函数的内联定义(inline)详解
开发语言·c++
sanqima6 小时前
CreateThread、_beginthreadex、AfxBeginThread三种线程创建的区别与联系
c++·tls·线程创建
sanqima6 小时前
依赖TLS和模块状态的MFC类
c++·mfc·tls·module state
All for pursuit.7 小时前
【动态规划-11】279.完全平方数
数据结构·c++·算法·leetcode·动态规划
瑶山7 小时前
Windows + WSL2 Ubuntu + VS Code配置C++开发环境
开发语言·c++·windows·vscode·wsl
小米里的大麦7 小时前
19 C、C++ 操作 MySQL
c语言·c++·mysql