子类继承父类的默认方式是private继承
另外:在C++中结构体也是可以互相继承的,它们之间的继承关系默认是public的
示例:
#include <iostream>
#include <cmath>
using namespace std;
class Triangle{
//private: //父类的私有成员子类函数不能访问,但是父类函数和友元函数可以访问
protected: //保护成员变量可以被子类函数访问,也可以被父类函数访问
int a,b,c; //protect是为继承量身定制
public:
Triangle(int a,int b,int c):a(a),b(b),c(c){}
int GetLength()const{
return a+b+c;
}
float GetArea()const{
float p = (a+b+c)/2.0;
return sqrt(p*(p-a)*(p-b)*(p-c));
}
// int GetA()const{ return a;}
};
class EqualTriangle:public Triangle{
public:
EqualTriangle(int bottm,int side):Triangle(bottm,side,side){}
int GetBottom()const{ //子类的成员函数可以访问父类protected的成员变量
return a;
}
int GetSide()const{
return b;
}
};
int main(){
cout << sizeof(EqualTriangle) << endl;
EqualTriangle e(10,15);
cout << e.GetLength() << endl; //子类对象可以访问父类所有成员函数
cout << e.GetArea() << endl;
cout << e.GetBottom() << endl; //访问成功
cout << e.GetSide() << endl;
}
示例二:
#include <iostream>
using namespace std;
class Simple{
private:
void Private(){
cout << __func__ << endl;
}
protected:
void Protected(){
cout << __func__ << endl;
}
public:
void Public(){
cout << __func__ << endl;
}
void Test(){ //在类中可以访问类中的任何成员
cout << __func__ << endl;
Public();
Protected();
Private();
}
};
int main(){
Simple t;
// t.Test();
t.Public(); //对象只能访问类中的public成员
// t.Protected();
// t.Private();
}
3.继承关系的构造顺序
派生类的构造函数与析构函数的调用顺序
派生类的构造函数调用顺序
父对象构造、成员变量构造、子对象构造的顺序
先构造父类对象,再构造子类对象。连父亲都没有,哪有儿子。
派生类的析构函数调用顺序
子对象析构、成员变量析构、父对象析构的顺序(同样与构造的顺序刚好相反)
先析构子类对象,再析构父类对象。要先把孩子交给父亲,然后父亲才会离开,不然孩子就丢了。
示例:
#include <iostream>
using std::cout;
using std::endl;
class Member{
public:
Member(int i){
cout << "Member Init" <<endl;
}
~Member(){
cout << "Member Destroy" <<endl;
}
};
class Parent{
public:
Parent(int i){
cout << "Parent Init" <<endl;
}
~Parent(){
cout << "Parent Destory" <<endl;
}
};
class Son