-
强化知识查看全部
-
强化知识查看全部
-
强化知识点查看全部
-
多重继承的实例(如果不声明是public,则系统默认为private)查看全部
-
多继承实例查看全部
-
什么时候需要使用虚的析构函数? 当存在继承关系的时候,使用父类指针指向子类对象,同时使用父类指针去释放这块内存,这是就需要虚析构函数。查看全部
-
在继承关系中,父类的对象不可以调用子类的特有的成员及函数,当用父类的指针指向子类堆中的对象 Person *p = new Soldier;并且想要销毁这片子类的内存时,直接delete p并不能销毁子类对象的内存,因而造成内存泄漏,通过将父类的析构函数写成虚析构函数,可以实现在销毁父类对象的同时,销毁子类对象内存查看全部
-
对于菱形继承的情况,子类D会继承两份基类A的内容,为了避免这种信息的冗余,可以将B与D设置成虚基类。查看全部
-
多继承的时候,实例化子类对象,先调用基类的构造函数,在调用子类的构造函数,调用基类的构造函数顺序按照初始化列表的顺序执行,销毁对象时,则调用析构函数,调用顺序按照生成的逆序实行查看全部
-
多重继承,3个类即以上,A是B的父类,B是C的父类; 多继承,3个类即以上,一个类同时继承了多个类; 若未指明继承方式,则系统默认为private私有继承。查看全部
-
对于全局函数以基类对象作为形参,void test(person p),基类和派生类的对象都值传递给函数形参person/sodier s; test(s),调用形参的时候,产生临时对象p,将调用基类的拷贝构造函数,再通过临时对象p来调用play()函数,test()函数结束时,将调用析构函数将其销毁。 对于调用以引用或者基类对象的指针作为参数的函数,并不会调用构造函数,不产生临时对象,效率更高。查看全部
-
在进行虚继承时,作为菱形继承最顶层的父类并不能进行参数的传递,也就是说参数只使用了顶层父类的默认参数而无法从子类当中获得传入的参数。 虚继承的好处是使底层的类实例化的对象当中只有一份顶层类的数据。查看全部
-
重定义:一个基类被两个子类继承 宏定义:(头部)#ifndef +大写的文件名如PERSON_H #define +大写的文件名如PERSON_H (尾部)#endif查看全部
-
当基类指针指向派生类的时候,如果析构函数不声明为虚函数,在析构的时候,不会调用派生类的析构函数,从而导致内存泄露。 void test1(Person p){p.play}调用test1的时候,因为在test1中所定义的参数是一个对象P,所以传值的时候会先实例化临时对象P,通过临时对象P调用play这个函数,在test1执行完毕之后,p这个临时对象就会被销毁 如果函数的参数是基类的对象,那么基类的对象和派生类的对象,都可以作为实参传递进去,并且可以正常使用。 void test2(Person &p) 没有实例化临时对象,使用基类的引用也可以接收基类的对象以及派生类的对象 void test3(Person *p)的调用结果和void test2(Person &p)一样查看全部
-
虚析构函数的用法:当存在继承关系时后我们使用父类的指针去指向堆中子类的对象,并且我们还想使用父类的指针去释放这块内存这个时候我们就需要虚析构函数。运用关键字virtual.这个关键字是可以被继承下去的,也就是说它的子类也会继承这个关键字即子类不用写关键字virtual也能成为虚析构函数。查看全部
举报
0/150
提交
取消