一:
为了惯例具有指针成员的类,必须定义三个复制控制成员:复制构造函数、赋值操作符和析构函数。
复制构造函数分配新元素并从被复制对象处复制值,赋值操作符撤销所保存的原对象并从右操作数向左操作数复制值,析构函数撤销对象。
重点是:赋值操作符。。。。。。。
~~~~~~
二:重点:操作符重载
-----定义同类之间的加法、减法、赋值等等----
类的操作符写成 例如 :x类 , x& x::operator
=、+、-(等号是复制操作符,加号是加法操作符,减号是减法操作符等等) 之后接(const x& a)
,其中x& a称作类为x的对象a的引用 。 赋值操作符返回类型就是右操作的 对象的形式(我这样写是返回
类的对象的引用形式,也可以返回其他的)。
操作符重载只是在我们通常所使用的,C++语言所定义的那些符号的前面加上operator标志,然后他们作为一个函数名来进行定义,函数的参数,就是运算符的运算数,函数的返回值,就是运算符的返回值,
其实你把,我们通常见到的那些运算符理解成函数就可以了,C++之所以提出运算符,主要是要与数学中的相关操作对应,并且力求使用方便。但是原理上,仍然
是函数的方法。也就是说,按照这种定义,你可以给运算符定义任何一种操作类型(当然你自然是希望他们完成那种你认为是相似的操作)。
格式
:例如一个类 Base
- class Base
- {
- public:
- Base(); //构造函数
- Base(const Base &); //复制构造函数
- Base &operator=(const Base &); //重载赋值操作符
- ~Base(); //析构函数
- ...
- private:
- ...
- };
复制构造函数与重载赋值操作符的参数是一致的,都是该类的const引用类型。
三:另一个大问题:C++中的继承问题,一般而言我们的继承主要是指公共继承,也就说如下的派生类定义所示:
- class Derived : public Base
- {
- public:
- ...
- private:
- ...
- }
类名冒号后面的是用来定义类的继承。
class 派生类名 : 继承方式(public) 基类名
{
派生类的成员
};
class 派生类名 : 继承方式(public) 基类名
{
派生类的成员
};
继承方式:public、private和protected,默认处理是public
四:在复制构造函数中,C++中的基类引用可以绑定一个派生类的对象,如果在允许访问的情况下,采用基类引用可以访问基类的成
员以及派生类的其他成员,采用引用可以复制派生类对象中基类成员的值到新创建的基类成员中,完成一个基类成员数据的填充操作,这时候一个完整的基类对象就
创建完成了。