继承
在子类的外部只能访问父类的public成员,
在子类的内部可以访问类的protected和public。
protected成员可以被基类的所有的派生类使用,这一性质可以沿继承树无限循环
#include<iostream>
#include<string.h>
using namespace std;
class Father{
private:
int money;
protected:
int room_key;
public:
void it_skill(void)
{
cout<<"father is it skill"<<endl;
}
int getMoney(void)
{
return money;
}
void setMoney(int money)
{
this->money=money;
}
};
class Son:public Father{
private:
int toy;
using Father::it_skill;
public:
using Father::room_key;
void play_game(void)
{
int m;
cout<<"son play game"<<endl;
/*money-=1
错,不能动直接拿父亲的私房钱
*/
/*但是可以问他要*/
m=getMoney();
m--;
setMoney(m);
/*派生类可以访问*/
room_key=1;
}
};
int main()
{
Son s;
s.setMoney(10);
cout<<s.getMoney()<<endl;
s.it_skill();
s.room_key=1;
return 0;
}
多重继承
#include<iostream>
#include<string.h>
#include<unistd.h>
using namespace std;
class Furniture{
private:
int weight;
public:
void setWeight(int weight){
this->weight=weight;
}
int getWeight(void)const
{
return weight;
}
};
class Sofa:virtual public Furniture
{
public:
void watchTV(void){
cout<<"watch TV"<<endl;
}
};
class Bed:virtual public Furniture{
public:
void sleep(void){
cout<<"sleep"<<endl;
}
};
class Sofabed:public Sofa,public Bed{
};
int main(int argc,char *argv[])
{
Sofabed s;
s.sleep();
s.watchTV();
s.setWeight(100);
}
构造函数的顺序:
先父后儿
1.先调用基类的构造函数
1.1先虚拟基类
1.2先一般基类
2.自身
2.1先对象成员
2.2后自己
(虚拟基类构造函数只执行一次)
#include<iostream>
#include<string.h>
#include<unistd.h>
using namespace std;
class Furniture{
private:
int weight;
public:
void setWeight(int weight){
this->weight=weight;
}
int getWeight(void)const
{
return weight;
}
Furniture(){
cout<<"Furniture()"<<endl;
}
};
class Vertification3C{
public:
Vertification3C(){
cout<<"Vertification3C()"<<endl;
}
};
class Sofa:virtual public Furniture,virtual public Vertification3C
{
private:
int a;
public:
void watchTV(void){
cout<<"watchTV"<<endl;
}
Sofa(){
cout<<"Sofa()"<<endl;
}
};
class Bed:virtual public Furniture,virtual public Vertification3C{
private:
int b;
public:
void sleep(void){
cout<<"sleep"<<endl;
}
Bed(){
cout<<"Bed()"<<endl;
}
};
class Sofabed:public Sofa,public Bed{
private:
int c;
public:
Sofabed(){
cout<<"Sofabed()"<<endl;
}
};
class LeftRightCom{
public:
LeftRightCom(){
cout<<"LeftRightCOm()"<<endl;
}
};
class Date{
public:
Date(){
cout<<"Date()"<<endl;
}
};
class Type{
public:
Type(){
cout<<"Type()"<<endl;
}
};
class LeftRightSofabed:public Sofabed,public LeftRightCom{
private:
Date date;
Type type;
public:
LeftRightSofabed(){
cout<<"LeftRightSofabed"<<endl;
}
};
int main(int argc,char *argv[])
{
LeftRightSofabed s;
return 0;
}