这里继承部分也有一部分属于类与对象
面向对象程序设计中最重要的一个概念是继承
达到了重用代码功能和提高执行时间的效果
当创建一个类时,您不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可。这个已有的类称为基类,新建的类称为派生类。
一个派生类继承了所有的基类方法,但下列情况除外:
- 基类的构造函数、析构函数和拷贝构造函数。
- 基类的重载运算符。
- 基类的友元函数。
继承类型
- 公有继承(public):当一个类派生自公有基类时,基类的公有成员也是派生类的公有成员,基类的保护成员也是派生类的保护成员,基类的私有成员不能直接被派生类访问,但是可以通过调用基类的公有和保护成员来访问。
- 保护继承(protected): 当一个类派生自保护基类时,基类的公有和保护成员将成为派生类的保护成员。
- 私有继承(private):当一个类派生自私有基类时,基类的公有和保护成员将成为派生类的私有成员。
多继承
#include<iostream> using namespace std; class Tangle{ public: Tangle(){ cout<<"Tangle"<<endl; }; int getcost(int area){ return area*70; } }; class Area{ public: int width; int height; Area(){ cout<<"Area"; }; int getArea(){ return width*height; } }; class Home:public Tangle,public Area{ public: void setWidth(int w); void setHeight(int h); Home(){ cout<<"Home"<<endl; }; void set(int w,int h){ setWidth(w); setHeight(h); } }; void Home::setWidth(int w){ width=w; } void Home::setHeight(int h){ height=h; } int main(){ Home h; h.set(12,21); int area = h.getArea(); cout<<"面积"<<area<<endl; cout<<"费用"<<h.getcost(area); return 0; }
[root@VM_0_11_centos gcc]# ./21.c Tangle AreaHome 面积252 费用17640[root@VM_0_11_centos gcc]#
另外多继承(环状继承),A->D, B->D, C->(A,B),例如:
这个继承会使D创建两个对象,要解决上面问题就要用虚拟继承格式
class D{......}; class B: virtual public D{......}; class A: virtual public D{......}; class C: public B, public A{.....};
虚继承--(在创建对象的时候会创建一个虚表)在创建父类对象的时候