基本语法
对多个类中重复的地方,提取为类

继承的基本用法

class df
{
public:
int j()
{
cout<<"iuwghrfi3f";
}
};
class fg1:public df
{
public:
fg1(){};
int a;
string s;
void operator()()
{
cout<<this->a;
}
};

三种继承方式

class df
{
public:
int a;
protected:
int b;
private:
int c;
};//三类成员
class fg1:public df//public继承
{
public:int a;
protected: int b;
};
class fg2:protected df//protect继承
{
protected:
int a;int b;
};
class fg3:private df//private继承
{
private:int c;
};
//父类的private子类能继承但不能访问。意思是子类中包括父类中的大多数数据,但有些不可访问,即使它们任然占据空间。

限定让父类参与但可以带入子类的方法

class s
{
public:
int a=2;
int sd()
{
return 22;
}
};
class bb:public s
{
public:
bb()
{
a=1;
cout<<"bb部署,序列= "<<g<<endl;
g++;
}
~bb()
{
cout<<"bb寄了"<<endl;
}
int a;
int sd()
{
return 11;
}
};
void cou(s &a)
{
cout<<"s的a启动!";
}

如上,程序返回”s的a启动!”,即使调用函数的是类s的子类而不是类s本身。

父类,父类中的类,子类,子类中的类的生成

class ba
{
public:
ba()
{
cout<<"ba部署,序列= "<<g<<endl;
g++;
}
~ba()
{
cout<<"ba寄了";
}
};
class bb:public fg
{
ba s;
public:
bb()
{
cout<<"bb部署,序列= "<<g<<endl;
g++;
}
~bb()
{
cout<<"bb寄了"<<endl;
}
};
//------------------------------------
//bb类中包含ba类,父类fg中包含jk类
//jk已部署,序列=0
//fg部署,序列= 1
//ba部署,序列= 2
//bb部署,序列= 3
//bb寄了
//ba寄了fg寄了
//jk寄了

一大坨东西

cout<<s1.s2.s3::s.s.s;

如上,子类访问父类需要限定符::

s1为类a1的对象,s2的对象a2包含在类a1中,类a2的父类为a3,它的对象为s3

注:静态/非静态的同名成员都可以通过::fangwen

int main()
{
bb s;
cout<<s.a<<endl<<s.s::a<<endl;
cout<<s.sd()<<endl<<s.s::sd()<<endl;
}

s为类bb的对象,a为s的数据成员,sd为类a的成员函数,另一个s为子类s的父类(二者重名),通过::访问 父类中的同名成员

多继承

class bb:public s,public df

只能看一眼

因为不常用。

菱形继承

和多继承一样,懒得写了
virtual限定虚基类
因为现在是

北京时间:2024.3.14.0.18