C++之继承关系
来源:互联网 发布:php时间戳转换 编辑:程序博客网 时间:2024/06/09 16:56
C++继承:公有,私有,保护
继承方式限定了基类成员在派生类中的访问权限,包括 public(公有的)、private(私有的)和 protected(受保护的)。此项是可选项,如果不写,默认为 private(成员变量和成员函数默认也是 private)。
共有继承 :
基类的public 和protected成员在派生类中保持不变,private 不可见。
保护继承:
基类的public 和protected成员在派生类中变成protected,不能被这个派生类的子类suofangwie,private 不可见。
私有继承:
基类的public 和protected成员在派生类中变成private,private 不可见。
#include<iostream>using namespace std;Class A //父类{ private: int privateA protected: int protectedA public: int publicA}class B:public A //基类A的派生类B(共有继承){ public: void func() { int b; b =privateA; //error:基类中私有成员在派生类中不可用 b = protectedA; //OK:基类保护成员在派生类中为保护成员 b = publicA; //OK:基类共有成员在派生类中为共有成员 }}class C:protected A //基类A的派生类B(保护继承){ public: void func() { int c; c =privateA; //error:基类中私有成员在派生类中不可用 c = protectedA; //OK:基类保护成员在派生类中为保护成员 c = publicA; //OK:基类共有成员在派生类中为保护成员 }}class D:private A //基类A的派生类B(继承){ public: void func() { int b; b =privateA; //error:基类中私有成员在派生类中不可用 b = protectedA; //OK:基类保护成员在派生类中为私有成员 b = publicA; //OK:基类共有成员在派生类中为私有成员 }}int main(){ int a; B objB; a =objB.privateA; //error:基类私有成员在派生类中不可见,对对象不可见 a=objB.protectedA; //error:基类保护成员在派生类中为保护成员,对对象不可见 a =objB.publicA; //Ok:基类共有成员在派生类中为公共成员,对对象可见 C = objC a =objC.privateA; //error:基类私有成员在派生类中不可见,对对象不可见 a=objC.protectedA; //error:基类保护成员在派生类中为保护成员,对对象不可见 a =objC.publicA; //Ok:基类共有成员在派生类中为保护,对对象不可见 D =objD; a =objD.privateA; //error:基类私有成员在派生类中不可见,对对象不可见 a=objD.protectedA; //error:基类保护成员在派生类中为私有成员,对对象不可见 a =objD.publicA; //Ok:基类共有成员在派生类中为私有成员,对对象不可见 return 0;}
多态性:
(1) 解释多态性:
函数的多种不同实现方式即为多态
(2) 必要性
在继承中,有时候基类的一些函数在派生类中也是有用的,但是功能不够全或者两者的功能实现方式就是不一样的,这个时候就希望重载那个基类的函数,但是为了不再调用这个函数时,出现不知道调用基类的还是子类的情况出现,于是就提出了多态。如果语言不知多态,则不能称为面向对象的。
(3) 实现(虚函数 virtual)
多态是实现是依赖于虚函数来实现的,之所以虚函数可以分清楚当前调用的函数是基类的还是派生类的,主要在于基类和派生类分别有着自己的虚函数表,再调用虚函数时,它们是通过去虚函数表去对应的函数的。
#include<iostream>using namespace std;class A{public: void print() { cout<<"A"<<endl; } virtual void print1() { cout<< "virtual A"<<endl; }};class B:public A{public : void print() {cout<<"B"<<endl;} virtual void print1() {cout<<"virtual B"<<endl;}}; void fn(A &s){s.print();s.print1();}int main(){ A a; B b; fn(a); fn(b); return 0;}
五、使用虚函数的一些限制
(1):只有类成员函数才能声明为虚函数,这是因为虚函数只适用于有继承关系的类对象中。
(2):静态成员函数不能说明为虚函数,因为静态成员函数不受限与某个对象,整个内存中只有一个,所以不会出现混淆的情况
(3):内联函数不可以被继承,因为内联函数是不能子啊运行中动态的确认其位置的。
(4):构造函数不可以被继承。
(5):析构函数可以被继承,而且通常声明为虚函数。
六、纯虚函数
纯虚函数声明:virtual 返回值类型成员函数名(参数表)=0;
含有纯虚函数的类为抽象类,它不能生成对象。
- Effective c++(笔记)之继承关系与面向对象设计
- hibernate之继承关系
- hibernate之继承关系
- C++之继承关系
- Objective-C 类继承关系
- C++之继承关系总结
- 类间关系之继承
- 《Effective C++》读书笔记之item32:确定你的public继承塑模出is-a关系
- C++之确定你的public继承塑模出is-a关系(32)---《Effective C++》
- object-c之继承
- Object-C之继承
- 【C++】:C++之继承
- objective-c之继承
- C ++之继承浅析
- [C++]友元关系的继承性
- C++:由输出推断继承关系
- 初识c#---继承和继承关系中的构造函数
- 精通Hibernate之映射继承关系一
- 通过接口来实现多态性,接口可以作为参数
- union的使用注意事项
- javascript中childNodes与children 区别 以及firstChild与firstElementChild区别
- Nutanix:放弃SAN 做真正的融合
- 计算机网络概述
- C++之继承关系
- Git ssh
- mysql导出、导入、备份和恢复
- Linux系统下常用命令操作
- Accumulo入门手册
- sql语句整理
- 关于C++面试--转载自牛客网
- 装饰器模式(Decorator) java IO
- js流行趋势