-
继承查看全部
-
#inlcude<iostream> using namespace std; int main() { }查看全部 -
soldier.play()调用自己的play函数
soldier.Person::play()调用父类的play函数
查看全部 -
当对象做完实参传递给形参时(非指针引用)则调用拷贝构造函数。而这节课里面的源码没有拷贝构造函数,所以调用系统默认拷贝构造函数,并无输出。
test(person p):调用时会产生一个临时对象,并会执行析构函数(可能有拷贝构造函数) test(person *p):不会产生临时的对象 test(person &p):不会产生临时的对象 所以采用指针和引用的执行速度更快
查看全部 -
父类的指针只能访问父类的数据成员和成员函数,不能访问子类独有的数据成员以及成员函数。
虚析构函数是为了解决基类的指针指向派生类对象,并用基类的指针删除派生类对象时,派生类析构函数不执行的问题。
如果某个类不包含虚函数,那一般是表示它将不作为一个基类来使用。当一个类不准备作为基类使用时,使析构函数为虚一般是个坏主意。因为它会为类增加一个虚函数表,使得对象的体积翻倍,还有可能降低其可移植性。
所以基本的一条是:无故的声明虚析构函数和永远不去声明一样是错误的。实际上,很多人这样总结:当且仅当类里包含至少一个虚函数的时候才去声明虚析构函数。
抽象类是准备被用做基类的,基类必须要有一个虚析构函数,纯虚函数会产生抽象类,所以方法很简单:在想要成为抽象类的类里声明一个纯虚析构函数。查看全部 -
使用&p和*p调用效率更高
查看全部 -
父类对象可以接受子类对象,子类指针不能指向父类对象。
查看全部 -
感觉这节课的纠错是强行加上去的。。。2333
查看全部 -
查看全部 -
查看全部 -
非虚继承时,实例化子类对象要分别执行其2个顶层父类构造函数,再分别执行2个父类的构造函数
虚继承后只执行一次顶层父类构造函数一次父类构造函数(2个父类构造函数都只执行一次)一次子类构造函数,并且顶层父类不能得到子类传递的参数
查看全部 -
多继承时,采用宏定义来解决重定义
#ifndef PERSON_H
#define PERSON_H ~~~~~~~~~~~~ #endif
查看全部 -
避免重复继承数据,用virtual进行虚继承(菱形继承关系)
下面的多继承按正常方式继承即可
查看全部 -
多继承会先调用父类的构造函数,再调用子类的构造函数,故用初始化列表
多继承方式:
class A : piblic B, public C
{
};
查看全部 -
test(person p):调用时会产生一个临时对象,并会执行析构函数 test(person *p):不会产生临时的对象 test(person &p):不会产生临时的对象 所以采用指针和引用的执行速度更快
查看全部
举报