C++类体系中,不能被派生类继承的

来源:互联网 发布:淘宝真皮女装退货率 编辑:程序博客网 时间:2024/06/14 05:14

编辑器总是根据类型来调用类成员函数。但是一个派生类的指针可以安全转化为一个基类指针。这样删除一个基类的指针的时候,c++不管这个指针指向一个基类对象还是一个派生类对象,调用的都是基类的析构函数而不是派生类的。如果你依赖于派生类的析构函数的代码来释放资源,而没有重载析构函数,那么会有资源泄露。所以建议的方式是将析构函数声明为虚函数。也就是delete a的时候,也会执行派生类的析构函数。


一个函数一旦声明为虚函数,那么不管你是否加上virtual修饰符,它在所有派生类中都成为虚函数。但是,由于理解明确起见,建议的方式还是加上virtual修饰符。


构造方法用来初始化类的对象,与父类的其他成员不同,他不能被子类继承(子类可以继承父类所有的成员变量和成员方法,但是不继承父类的构造方法)。因此,在创建子类对象的时候,为了初始化父类继承来的数据成员,系统需要调用其父类的的构造方法。


如果没有显示的构造函数,编辑器会给一个默认的构造函数,并且该默认的构造函数仅仅在没有显示的声明构造函数情况下创建。


构造原则如下:

1、如果子类没有定义构造方法,则调用父类的无参数的构造方法。

2、如果子类定义了构造方法,不论是无参数还是带参数,在创建子类的对象的时候,首先执行父类的无参数的构造方法,然后执行自己的构造方法。

3、在创建子类对象的时候,如果子类的构造函数没有显示的调用父类的构造函数,则会调用父类的默认无参构造函数。

4、在创建子类对象的时候,如果子类的构造函数没有显示调用父类的构造函数且父类自己提供了无参构造函数,则会调用父类自己的无参构造函数。

5、在创建子类对象的时候,如果子类的构造函数没有显示调用父类的构造函数且父类只定义了自己的有参构造函数,则会出错(如果父类只有有参数的构造方法,子子类必须显示调用此带参构造方法)。

6、如果子类调用父类带参数的构造方法,需要用初始化父类成员对象的方式。

0 0