C++重要的几个概念
2016-04-06 23:30
295 查看
1、虚继承
在默认情况下,派生类对象中应该包含子类那部分。如果某个类在派生过程中出现了多次,则应该有包含该类的多个子对象。但是这样显然对iostream是行不通的,一个iostream对象肯定只希望在同一个缓冲区中进行读写操作,也会要求条件状态能同时反映输入输出操作的情况。假如iostream包含了两份base_ios的话,显然就没法实现了。
所以虚继承就是为了解决这种情况,领某个类作出声明,承诺愿意共享它的基类,共享的基类子对象成为虚基类。在这种情况下,无论虚基类在继承体系中出现多少次,在派生类中都共享一个虚基类的一份拷贝。
2、抽象基类
纯虚函数:末尾加=0,说明当前这个函数是没有实际意义的,无需定义它的实现。但也可以提供定义,但不能在类内为一个=0的函数提供函数体,必须定义在外部。
含有纯虚函数(或者未经覆盖直接继承)的类是抽象基类,抽象基类负责定义接口,而后续的其他类可以覆盖该接口。我们不能创建抽象基类的对象。
3、继承的构造函数
继承构造函数的引入原因:如果基类的构造函数很多,那么子类的构造函数想要实现同样多的构造接口,必须一一调用基类的构造函数,有点麻烦。对于基类的每一个构造函数,编译器都在派生类中生成一个形参列表完全相同的构造函数,而派生类自己的数据成员则采用默认初始化
4、模板特例化和偏特化
特化:模板为什么要特化,因为编译器认为,对于特定的类型,如果我能对某一功能更好的实现,那么就该听我的。
模板分为类模板与函数模板,特化分为全特化与偏特化。全特化就是限定死模板实现的具体类型,偏特化就是如果这个模板有多个类型,那么只限定其中的一部分。
5、类型转换运算符
类型转换运算符是类的一种特殊成员,他负责将一个类类型的值转换为其他类型。
一般的形式是:operator type() const; 声明为const的因为不应该改变待转换对象的内容。
在默认情况下,派生类对象中应该包含子类那部分。如果某个类在派生过程中出现了多次,则应该有包含该类的多个子对象。但是这样显然对iostream是行不通的,一个iostream对象肯定只希望在同一个缓冲区中进行读写操作,也会要求条件状态能同时反映输入输出操作的情况。假如iostream包含了两份base_ios的话,显然就没法实现了。
所以虚继承就是为了解决这种情况,领某个类作出声明,承诺愿意共享它的基类,共享的基类子对象成为虚基类。在这种情况下,无论虚基类在继承体系中出现多少次,在派生类中都共享一个虚基类的一份拷贝。
2、抽象基类
纯虚函数:末尾加=0,说明当前这个函数是没有实际意义的,无需定义它的实现。但也可以提供定义,但不能在类内为一个=0的函数提供函数体,必须定义在外部。
含有纯虚函数(或者未经覆盖直接继承)的类是抽象基类,抽象基类负责定义接口,而后续的其他类可以覆盖该接口。我们不能创建抽象基类的对象。
3、继承的构造函数
继承构造函数的引入原因:如果基类的构造函数很多,那么子类的构造函数想要实现同样多的构造接口,必须一一调用基类的构造函数,有点麻烦。对于基类的每一个构造函数,编译器都在派生类中生成一个形参列表完全相同的构造函数,而派生类自己的数据成员则采用默认初始化
4、模板特例化和偏特化
特化:模板为什么要特化,因为编译器认为,对于特定的类型,如果我能对某一功能更好的实现,那么就该听我的。
模板分为类模板与函数模板,特化分为全特化与偏特化。全特化就是限定死模板实现的具体类型,偏特化就是如果这个模板有多个类型,那么只限定其中的一部分。
5、类型转换运算符
类型转换运算符是类的一种特殊成员,他负责将一个类类型的值转换为其他类型。
一般的形式是:operator type() const; 声明为const的因为不应该改变待转换对象的内容。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- 解析C++中派生的概念以及派生类成员的访问属性