-
1、不是虚继承的情况下,实例化子类对象的时候,要分别执行其2个父类的父类构造函数,再分别执行2个父类的构造函数,因为继承关系中,必须实例化父类对象后(执行父类的构造函数)才能实例化子类对象(执行子类的构造函数),销毁的时候也要分别执行这个子类2个父类的析构函数及父类各自的父类的析构函数。<br> 用了虚继承后只执行一次爷爷构造函数一次爸爸构造函数(2个爸爸构造函数都只执行一次)一次孙子构造函数,爷父孙析构函数也是只执行一次。<br>
2、在进行虚继承时,作为菱形继承最顶层的父类并不能进行参数的传递,也就是说参数只使用了顶层父类的默认参数而无法从子类当中获得传入的参数。 虚继承的好处是使底层的类实例化的对象当中只有一份顶层类的数据。
查看全部 -
1、如果文件被定义了两次,例如include .h这种情况, 通过宏定义解决重定义 在原.h头文件中: #ifndef PERSON_H #define PERSON_H 。。。 #endif
2、重定义,就是背定义了多次 通过宏定义解决重定义 #ifndef #define 意思是假如没有定义它,就定义它 尾部是#endif 最好在每个头文件都加,因为你也不知道什么时候有可能不继承
查看全部 -
当对象做完实参传递给形参时(非指针引用)则调用拷贝构造函数。而这节课里面的源码没有拷贝构造函数,所以调用系统默认拷贝构造函数,并无输出。
test(person p):调用时会产生一个临时对象,并会执行析构函数(可能有拷贝构造函数) test(person *p):不会产生临时的对象 test(person &p):不会产生临时的对象 所以采用指针和引用的执行速度更快
查看全部 -
对象赋值、指针指向的时候,如果用父类去接受或者是指针指向的方式,无论是用soldier初始化p 这个对象,还是soldier 直接赋值给p 这个对象,soldier子类中的数据成员的数据都能够赋值给它的父类当中的对象对应的那个数据成员 p只能调用自己的数据成员和成员函数,不能调用子类的数据成员和成员函数 通过父类的指针指向子类的对象,销毁的时候执行的是父类的析构函数,子类的内存没有释放,为了防止内存的泄漏,此时需要用virtual关键字修饰修购函数,virtual可以被继承
查看全部 -
is a”代表的是类之间的继承关系,“has a”代表的是对象和它的成员的从属关系。c++还有另一种实现has-a关系的途径----私有继承。使用私有继承,基类的公有成员和保护成员都将成为派生类的私有成员。这意味着基类方法将不会成为派生对象公有接口的一部分,但可以在派生类的成员函数中使用它们。
使用公有继承,基类的公有方法将成为派生类的公有方法。简而言之,派生类将继承基类的接口,这是is-a关系的一部分。使用私有继承,基类的公有方法将成为派生类的私有方法。简而言之,派生类不能继承基类的接口。正如从被包含对象中看到的,这种不完全继承是has-a关系的一部分。
因此私有继承提供的特性与包含相同:获得实现,但不获得接口。所以,私有继承也可以用来实现has-a关系。查看全部 -
<>是先在系统目录下查找,然后在PATH中查找,不在当前目录下查找
""是现在当前目录下查找,然后再系统目录下查找,最后在PATH下查找
查看全部 -
protected继承和private继承都无法用子类的private继承并访问到父类的private
若是protected继承,则均被继承到protected,若是private继承,则均被继承到private。
查看全部 -
1\公有成员可以直接访问,可以间接通过自身类的公有函数访问,也可以通过子类的公有函数访问
2\保护成员不可以直接访问,可以间接通过自身类的公有函数访问,也可以通过子类的公有函数访问
3\私有成员不可以直接访问,可以间接通过自身类的公有函数访问,不可以通过子类的公有函数访问
4\类中成员函数可访问protected和private成员。 类的对象不能访问protected和private成员。
查看全部 -
protected在没有继承时和private基本一样
公有继承:
基类成员 继承方式 派生类成员
private | | 无法访问
protected | public |protected
public | |public
查看全部 -
申请:类的子成员对象的构造函数(顺序)->类的构造函数
释放:类的析构函数->类子成员对象的构造函数(倒序)
申请:基类的成员对象的构造函数(顺序)->基类的构造函数->子类的成员对象的构造函数(顺序)->子类的构造函数
释放:子类的析构函数->子类成员对象的析构函数->基类的析构函数->基类成员对象的析构
查看全部 -
A,B类从A类私有派生,那么A类的公共成员函数成为B类的公共成员函数。
B,B类从A类私有派生,那么A类的公共成员函数成为B类的私有成员函数。
C,B类从A类保护派生,那么A类的公共成员函数成为B类的保护成员函数。
D,B类从A类保护派生,那么A类的保护成员函数成为B类的保护成员函数。
解析:A,B类从A类私有派生,那么A类的公共成员函数成为B类的私有成员函数。
查看全部 -
A,B类从A类公共派生,那么A类的公共成员函数成为B类的公共成员函数。
B,B类从A类公共派生,那么A类的保护成员函数成为B类的保护成员函数。
C,B类从A类公共派生,那么A类的私有成员函数不能被B类继承并使用。
D,B类从A类公共派生,那么A类的私有成员函数成为B类的私有成员函数。
解析:D ,A类的私有成员函数不会成为B类的私有成员函数。
查看全部 -
A,B类从A类派生,那么B类是A类的子类,A类是B类的超类。 B,B类从A类派生,那么B类中含有A类的所有数据成员。
C,B类从A类公共派生,那么可以通过B类的对象调用到A类的所有成员函数
D,B类从A类公共派生,那么可以在B类中直接使用A的公共及保护限定符的数据成员。
解析:C错了,,,通过B类的对象不能调用到private下的函数
查看全部 -
公有继承:
基类的公有成员仍然为公有成员,可以有派生类成员函数和派生类对象直接访问。
基类的私有成员在派生类中无论是派生类的成员还是派生类的对象都无法直接访问。
保护成员在派生类中仍然为保护成员,可以通过派生类的成员函数访问,但不能通过派生类的对象访问查看全部 -
保护继承:
基类成员 (父类) 继承方式 派生类成员(子类)
private | | 无法访问
protected | protected |protected
public | |protected
私有继承:
基类成员(父类) 继承方式 派生类成员(子类)
private | | 无法访问
protected | private |private
public | |private
查看全部
举报