四个默认成员函数和重载运算符

来源:互联网 发布:淘宝刀剑能开刃吗 编辑:程序博客网 时间:2024/05/19 17:56
1.类和对象的基础知识:类实际上是对某种类型的对象变量和方法的原型,类是从一些具有相同属性或功能的具体实例,抽象出共有的一些属性的,自定义抽象数据类型。public成员可从类外部直接访问,private/protected不能从类外部直接访问,每个限定符在类体中可以使用多次,类体中如果没有定义限定符,则默认为私有的,类的访问限定符体现了面向对象的封装性。

结构体内存对其规则:

(1).第一个成员在与结构体变量偏移量为0的地址处。

(2).其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。

(3).结构体总大小为最大对齐数(每个成员变量除了第一个成员都有一个对齐数)的整数倍。

 

(4).如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。

2.四个默认成员函数及运算符重载:

(1).【构造函数】

 

成员变量为私有的,要对它们进行初始化,必须用一个公有成员函数来进行。同时这个函数应该有且仅在定义对象时自动执行一次,这时调用的函数称为构造函数(constructor

构造函数是特殊的成员函数,其特征如下:

 

1. 函数名与类名相同。

2. 无返回值

3. 对象构造(对象实例化)时系统自动调用对应的构造函数。

4. 构造函数可以重载。

5. 构造函数可以在类中定义,也可以在类外定义。

 

6. 如果类定义中没有给出构造函数,则C++编译器自动产生一个缺省的构造函数,但只要我们定义了一个构造函数,系统就不会自动生成缺省的构造函数。

 

7. 无参的构造函数全缺省值的构造函数都认为是缺省构造函数,并且缺省的构造函数只能有一个。

(2).【拷贝构造函数】

 

创建对象时使用同类对象来进行初始化,这时所用的构造函数称为拷贝构造函数(Copy Constructor),拷贝构造函数是特殊的构造函数

 

特征:

 

1. 拷贝构造函数其实是一个构造函数的重载。

2. 拷贝构造函数的参数必须使用引用传参,使用传值方式会引发无穷递归调用。(思考为什么?)

3. 若未显示定义,系统会默认缺省的拷贝构造函数。缺省的拷贝构造函数会,依次拷贝类成员进行初始化。

(3).【析构函数】

 

当一个对象的生命周期结束时,C++编译系统会自动调用一个成员函数,这个特殊的成员函数即析构函数(destructor

 

构造函数是特殊的成员函数,其特征如下:

 

1. 析构函数在类名加上字符~

2. 析构函数无参数无返回值。

3. 一个类有且只有一个析构函数。若未显示定义,系统会自动生成缺省的析构函数。

4. 对象生命周期结束时,C++编译系统系统自动调用析构函数。


(4).【赋值运算符重载】

 

拷贝构造函数是创建的对象,使用一个已有对象来初始化这个准备创建的对象。赋值运算符的重载是对一个已存在的对象进行拷贝赋值。

3.隐含的this指针,运算符重载:

隐含的this指针

 

1. 每个成员函数都有一个指针形参,它的名字是固定的,称为this指针,this指针是隐式的。(构造函数比较特殊,没有这个隐含this形参)

 

2. 编译器会对成员函数进行处理,在对象调用成员函数时,对象地址作实参传递给成员函数的第一个形参this指针。

 

3. this指针是成员函数隐含指针形参,是编译器自己处理的,我们不能在成员函数的形参中添加this指针的参数定义,也不能在调用时显示传递对象的地址给this指针。

 

运算符重载是通过创建运算符函数实现的,运算符函数定义了重载的运算符将要进行的操作,运算符函数的定义和其他函数的定义类似,唯一的区别是运算符函数的函数名是由关键字operator和其后要重载的运算符符号构成的。


 




阅读全文
0 0
原创粉丝点击