1.应定义一个分配内存(而不是将指针指向已有内存)的复制构造函数.这样程序能够将类对象初始化为另一个类对象.
这种构造函数的原型通常如下:
className(const className & )
同样,赋值操作符的原型如下:
className & className::operator = (const className &)
转换函数的定义:
className1 className1::className2(){....}
2.className *p = new className;//默认构造函数
className a=b;//b也是a的同类,将调用复制构造函数 className(const className &)
*p=b;//*p和b都是相同的类,将调用赋值操作符(=)
a="Nancy Putter";//首先调用构造函数,然后调用赋值操作符(=)
3.public继承将基类的公有成员成为派生类的公有成员,基类私有部分在派生类中只能
通过基类的公有和保护方法访问
4.先构造基类对象,后构造派生类对象; 先析构派生类,后析构基类.
5.动态分配内存时(new和delete)需要 定义 析构函数,复制构造函数和重载赋值操作符.
6.纯虚函数只需在虚函数后面加上 =0即可,纯虚函数不用定义,但也不能用它属于的类来创建变量.
7.赋值操作符,构造函数,析构函数 不能被继承
8.3种继承机制比较:
特征 公有继承 保护继承 私有继承
公有成员变成: 派生类的公有成员 派生类的保护成员 派生类的私有成员
保护成员变成: 派生类的保护成员 派生类的保护成员 派生类的私有成员
私有成员变成: 只能通过基类 接口访问 只能通过基类接口访问 只能通过基类接口访问
能否隐式向上转换: 是 是(但只能在派生类中) 否