草庐IT

<三>关于重载 隐藏 覆盖

重载关系一组函数要重载,必须处在同一个作用域中,而且函数名字相同,参数列表不同代码1中的Base中的show()和show(int)属于重载代码2中的Base中的show()和Derive中的show()不属于重载不在同一个作用域下面隐藏/重定义的关系(主要是指作用域隐藏)在继承结构当中,当子类和父类中有同名成员时,子类成员会隐藏父类成员.子类成员和父类成员构成隐藏关系,也叫重定义。只要函数名相同,就构成隐藏关系。想要调用父类的成员就要指定作用域,显式的调用。子类把基类的同名成员全部都给隐藏掉了,只要名字相同就会发生隐藏,无所谓子类函数的返回值,参数列表是否与父类一致.例如代码2中的Deriv

<二>派生类的构造过程

派生类从继承可以继承来所有的成员(变量和方法)除了构造函数和析构函数派生类怎么初始化从基类继承来的成员变量的呢?通过调用基类的构造函数来初始化派生类的构造函数和析构函数,负责初始化和清理派生类部分派生类从基类继承来的成员的初始化和清理由谁负责?是由基类的构造和析构函数来负责派生类对象的构造和析构的过程是:1:派生类调用基类的构造函数,初始化化从基类继承来的成员2:调用派生类自己的构造函数,初始化派生类自己特有的成员.....派生类对象的作用域到期了3:调用派生类的析构函数,释放派生类成员可能占用的外部资源(堆内存,文件)4:调用基类的析构函数,释放派生类内存中,从基类继承来的成员可能占用的外部

<五>关于虚析构函数

问题一:哪些函数不能实现成虚函数虚函数依赖:1:虚函数能产生地址,存储在vftable中2:对象必须存储在vfptr->vftable->虚函数地址**构造函数**1:virtual+构造函数(NO,不可以在构造函数前加virtual2:构造函数中调用的任何函数,都是静态绑定(lg:派生类对象构造过程中,先调用基类的构造函数,由于要通过对象拿到内存中的虚函数表指针,此时基类对象还没有构造出来,如何实现动态绑定?)**static静态成员方法,也不可以加virtual,static静态成员方法的调用不基于对象**析构函数可以加virtual,析构函数调用的时候,对象是存在的,所以可以通过对象内存

<四>虚函数 静态绑定 动态绑定

代码1classBase{public: Base(intdata=10):ma(data){ coutshow();//静态绑定(编译期间绑定) pb->show(100)//静态绑定(编译期间绑定)cout代码2classBase{public: Base(intdata=10):ma(data){ coutshow();//动态绑定(运行期间绑定)pb->show(100)//动态绑定(运行期间绑定))cout在上面代码2中,Base中voidshow()和voidshow(int)为虚函数,在Derive中有返回值,函数名,参数列表都相同的show()方法,这个时候我叫重写(或覆盖即要

<五>关于虚析构函数

问题一:哪些函数不能实现成虚函数虚函数依赖:1:虚函数能产生地址,存储在vftable中2:对象必须存储在vfptr->vftable->虚函数地址**构造函数**1:virtual+构造函数(NO,不可以在构造函数前加virtual2:构造函数中调用的任何函数,都是静态绑定(lg:派生类对象构造过程中,先调用基类的构造函数,由于要通过对象拿到内存中的虚函数表指针,此时基类对象还没有构造出来,如何实现动态绑定?)**static静态成员方法,也不可以加virtual,static静态成员方法的调用不基于对象**析构函数可以加virtual,析构函数调用的时候,对象是存在的,所以可以通过对象内存

<四>虚函数 静态绑定 动态绑定

代码1classBase{public: Base(intdata=10):ma(data){ coutshow();//静态绑定(编译期间绑定) pb->show(100)//静态绑定(编译期间绑定)cout代码2classBase{public: Base(intdata=10):ma(data){ coutshow();//动态绑定(运行期间绑定)pb->show(100)//动态绑定(运行期间绑定))cout在上面代码2中,Base中voidshow()和voidshow(int)为虚函数,在Derive中有返回值,函数名,参数列表都相同的show()方法,这个时候我叫重写(或覆盖即要
12