C++类体系中,不能被派生类继承的
2016-07-21 17:03
351 查看
编辑器总是根据类型来调用类成员函数。但是一个派生类的指针可以安全转化为一个基类指针。这样删除一个基类的指针的时候,c++不管这个指针指向一个基类对象还是一个派生类对象,调用的都是基类的析构函数而不是派生类的。如果你依赖于派生类的析构函数的代码来释放资源,而没有重载析构函数,那么会有资源泄露。所以建议的方式是将析构函数声明为虚函数。也就是delete a的时候,也会执行派生类的析构函数。
一个函数一旦声明为虚函数,那么不管你是否加上virtual修饰符,它在所有派生类中都成为虚函数。但是,由于理解明确起见,建议的方式还是加上virtual修饰符。
构造方法用来初始化类的对象,与父类的其他成员不同,他不能被子类继承(子类可以继承父类所有的成员变量和成员方法,但是不继承父类的构造方法)。因此,在创建子类对象的时候,为了初始化父类继承来的数据成员,系统需要调用其父类的的构造方法。
如果没有显示的构造函数,编辑器会给一个默认的构造函数,并且该默认的构造函数仅仅在没有显示的声明构造函数情况下创建。
构造原则如下:
1、如果子类没有定义构造方法,则调用父类的无参数的构造方法。
2、如果子类定义了构造方法,不论是无参数还是带参数,在创建子类的对象的时候,首先执行父类的无参数的构造方法,然后执行自己的构造方法。
3、在创建子类对象的时候,如果子类的构造函数没有显示的调用父类的构造函数,则会调用父类的默认无参构造函数。
4、在创建子类对象的时候,如果子类的构造函数没有显示调用父类的构造函数且父类自己提供了无参构造函数,则会调用父类自己的无参构造函数。
5、在创建子类对象的时候,如果子类的构造函数没有显示调用父类的构造函数且父类只定义了自己的有参构造函数,则会出错(如果父类只有有参数的构造方法,子子类必须显示调用此带参构造方法)。
6、如果子类调用父类带参数的构造方法,需要用初始化父类成员对象的方式。
一个函数一旦声明为虚函数,那么不管你是否加上virtual修饰符,它在所有派生类中都成为虚函数。但是,由于理解明确起见,建议的方式还是加上virtual修饰符。
构造方法用来初始化类的对象,与父类的其他成员不同,他不能被子类继承(子类可以继承父类所有的成员变量和成员方法,但是不继承父类的构造方法)。因此,在创建子类对象的时候,为了初始化父类继承来的数据成员,系统需要调用其父类的的构造方法。
如果没有显示的构造函数,编辑器会给一个默认的构造函数,并且该默认的构造函数仅仅在没有显示的声明构造函数情况下创建。
构造原则如下:
1、如果子类没有定义构造方法,则调用父类的无参数的构造方法。
2、如果子类定义了构造方法,不论是无参数还是带参数,在创建子类的对象的时候,首先执行父类的无参数的构造方法,然后执行自己的构造方法。
3、在创建子类对象的时候,如果子类的构造函数没有显示的调用父类的构造函数,则会调用父类的默认无参构造函数。
4、在创建子类对象的时候,如果子类的构造函数没有显示调用父类的构造函数且父类自己提供了无参构造函数,则会调用父类自己的无参构造函数。
5、在创建子类对象的时候,如果子类的构造函数没有显示调用父类的构造函数且父类只定义了自己的有参构造函数,则会出错(如果父类只有有参数的构造方法,子子类必须显示调用此带参构造方法)。
6、如果子类调用父类带参数的构造方法,需要用初始化父类成员对象的方式。
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- PostgreSQL教程(三):表的继承和分区表详解
- Lua面向对象之类和继承浅析
- Lua和C语言的交互详解
- 浅析Ruby中继承和消息的相关知识
- 详解C#编程中构造函数的使用
- 设计引导--一个鸭子游戏引发的设计理念(多态,继承,抽象,接口,策略者模式)
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法
- C 语言简单加减乘除运算
- C语言自动生成enum值和名字映射代码
- C语言练习题:自由落体的小球简单实例
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法