-
C++中派生类对象可以赋值给基类,子类对象可以赋值给父类;
反之不可以。
用父类指针去指向子类对象也只能使用父类拥有的数据成员和成员函数
查看全部 -
C++中父类和子类用法相同时,只能进行隐藏不能进行重载。
查看全部 -
C++中的覆盖和隐藏
隐藏:
访问父类同名函数的方法:
查看全部 -
C++中protected继承:
继承到protected访问限定符下:
private私有继承:
查看全部 -
C++中public继承中:
查看全部 -
C++中继承的代码书写方法:
先调用父类构造函数在调用子类构造函数、先调用子类析构函数、在调用父类析构函数
查看全部 -
虚基类是用关键字virtual声明继承的父类,即便该基类在多条链路上被一个子类继承,但是该子类中只包含一个该虚基类的备份,虚基类主要用来解决继承中的二义性问题,这就是是虚基类的作用所在。
视频里描述有误,这里应该Person是虚基类。
查看全部 -
菱形继承时,顶层基类会创建两个对象,产生两份成员数据,这是我们不想要的;虚继承可以解决该问题,这种情况下,顶层基类不会从子类中获取数据而使用自己的默认参数。
查看全部 -
如果父类 子类定义了同一个函数或属性,则子类对象只能直接访问子类的函数和属性,这叫做隐藏。 但是上述情况下,子类对象可以通过间接方式访问父类函数和属性。查看全部
-
非virtual场景: 如果将子类对象复制给父类对象,则子类属性会覆盖父类属性,但是父类对象只能访问父类函数,而不能访问子类函数。
查看全部 -
重定义:B继承A,C继承A,定义B,C类的时候就重复定义了A,此时需要解决重定义的问题
#ifndef PERSON_H //#ifndef意思是如果没有定义
#define PERSON_H
……
#endif查看全部 -
1Person *p=new Soldier;//用Person的指针指向堆中 soldier的对象
p->play();
delete p;
p=NULL;
发现这个时候析构函数调用的时候只调用了父类的析构函数,并没有调用子类的析构函数,所以这会产生内存的泄露,如果想释放这段内存,要在父类和子类的析构函数前面都加上virtua
2 Soldier soldier;在栈中实例化对象会执行父类的析构函数。
查看全部 -
使用虚继承时不会重复调用最顶层父类的构造函数和析构函数,顶层父类只能使用顶层父类构造函数的默认值,而无法从子类的子类中获得传入的参数
查看全部 -
重定义:B继承A,C继承A,定义B,C类的时候就重复定义了A,此时需要解决重定义的问题
#ifndef PERSON_H //#ifndef意思是如果没有定义
#define PERSON_H
……
#endif查看全部 -
Person *p=new Soldier;//用Person的指针指向堆中 soldier的对象
p->play();
delete p;
p=NULL;
发现这个时候析构函数调用的时候只调用了父类的析构函数,并没有调用子类的析构函数,所以这会产生内存的泄露,如果想释放这段内存,要在父类和子类的析构函数前面都加上virtua
查看全部
举报