继承
2016-03-22 13:22
357 查看
三种继承方式
公有继承
保护继承
私有继承
1.公有继承
基类的公有成员和保护成员被继承时保持原来的访问权限,而基类的私有成员在派生类中是不可见的。
2.保护继承
基类的公有成员和保护成员被继承时将成为派生类的保护成员,子类内可访问,类外不可访问。
3.私有继承
基类的公有成员和保护成员被继承时将成为派生类的私有成员,并且不能被这个派生类的子类访问。
*基类的私有成员不可访问
构造与析构顺序
构造与析构顺序
D继承自B,构造时先调用基类的构造函数,再调用子类的构造函数。析构时先调用子类析构,再析构基类(调用子类析构时会自动调用基类的析构函数)。
若在继承时继承了多个基类,则构造时先基类再子类,其中基类按先后顺序构造,析构相反
同名隐藏:
只调用子类中的show函数
-->同名隐藏:在派生类中重新定义了基类中同名的函数(非虚函数和静态函数),此时基类的同名函数被隐藏
赋值兼容规则
1.子类对象可直接赋给基类对象(切割)
3.基类指针/引用可直接指向子类对象
4.子类指针/引用不能直接指向基类对象
友元
友元关系不能继承,基类的友元不能访问子类的私有成员和保护成员(即父亲的朋友不是儿子的朋友)。
static
基类定义了static成员,则整个继承体里只有一个这样的成员(共享一个成员),无论派生多少类,仅有这一个static成员
公有继承
保护继承
私有继承
1.公有继承
基类的公有成员和保护成员被继承时保持原来的访问权限,而基类的私有成员在派生类中是不可见的。
2.保护继承
基类的公有成员和保护成员被继承时将成为派生类的保护成员,子类内可访问,类外不可访问。
3.私有继承
基类的公有成员和保护成员被继承时将成为派生类的私有成员,并且不能被这个派生类的子类访问。
*基类的私有成员不可访问
构造与析构顺序
构造与析构顺序
class B { public: B() { cout << "B()" << endl; } ~B() { cout << "~B()" << endl; } }; class D :public B { public: D() { cout << "D()" << endl; } ~D() { cout << "~D()" << endl; } }; int main() { D d; system( "pause"); return 0; }
D继承自B,构造时先调用基类的构造函数,再调用子类的构造函数。析构时先调用子类析构,再析构基类(调用子类析构时会自动调用基类的析构函数)。
若在继承时继承了多个基类,则构造时先基类再子类,其中基类按先后顺序构造,析构相反
同名隐藏:
class B { public: void show() { cout << "B::show()" << endl; } void show(int ) { cout << "B::show(int)" << endl; } }; class D :public B { public: void show() { cout << "D::show()" << endl; } }; int main() { D d; d.show(); system( "pause"); return 0; }输出:D::show()
只调用子类中的show函数
-->同名隐藏:在派生类中重新定义了基类中同名的函数(非虚函数和静态函数),此时基类的同名函数被隐藏
赋值兼容规则
1.子类对象可直接赋给基类对象(切割)
Base b; D d; b=d;//正确 d=b;//错误2.基类对象不能赋值给子类对象
3.基类指针/引用可直接指向子类对象
4.子类指针/引用不能直接指向基类对象
D *pd=&b;//错误 B *pb=&d//正确
友元
友元关系不能继承,基类的友元不能访问子类的私有成员和保护成员(即父亲的朋友不是儿子的朋友)。
static
基类定义了static成员,则整个继承体里只有一个这样的成员(共享一个成员),无论派生多少类,仅有这一个static成员
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- PostgreSQL教程(三):表的继承和分区表详解
- Lua中调用C++函数示例
- Lua面向对象之类和继承浅析
- Lua教程(一):在C++中嵌入Lua脚本
- 浅析Ruby中继承和消息的相关知识
- Lua教程(二):C++和Lua相互传递数据示例
- 设计引导--一个鸭子游戏引发的设计理念(多态,继承,抽象,接口,策略者模式)
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法