继承
#include <iostream>
using namespace std;
class CFather
{
public:
int m_father;
long m_money;
CFather() {
m_father = 10;
m_money = 30;
}
void ShowFather() {
cout << "ShowFather" << endl;
}
void Show() {
cout << "CFather::show" << endl;
}
void Play() {
cout << "Play" << endl;
}
protected:
private:
};
class CSon :public CFather
{
public:
int m_son;
long m_money;
CSon() {
m_son = 20;
m_money = 40;
}
void ShowSon() {
cout << "ShowSon" << endl;
}
void Show() {
cout << "CSon::show" << endl;
}
protected:
private:
};
int main() {
CSon son;
cout << son.m_father << endl;
cout << son.m_son << endl;
son.ShowFather();
son.ShowSon();
cout << son.m_money << endl;
cout << son.CFather::m_money << endl;
son.Show();
son.CFather::Show();
son.CSon::Play();
son.CFather::Play();
son.Play();
cout << &son << endl;
cout << &son.m_father << endl;
cout << &son.CFather::m_money << endl;
cout << &son.m_son << endl;
cout << &son.CSon::m_money << endl;
system("pause");
return 0;
}
继承的优点
#include <iostream>
using namespace std;
class People
{
public:
void play() {
cout << "play" << endl;
}
protected:
private:
};
class CYellowPeople :public People
{
public:
protected:
private:
};
class CWritePeople :public People
{
public:
protected:
private:
};
class CBlackPeople :public People
{
public:
protected:
private:
};
class CBluePeople :public People
{
public:
protected:
private:
};
int main() {
CYellowPeople people1;
people1.play();
CWritePeople people2;
people2.play();
CBlackPeople people3;
people3.play();
CBluePeople people4;
people4.play();
system("pause");
return 0;
}
三种继承方式之public
继承方式 | 父类 | 子类 |
---|
public: | private | 不可访问 |
| protected | protected |
| public | public |
class CFather
{
public:
int m_pub;
CFather() {
m_pub = 10;
m_pro = 11;
m_pri = 12;
}
protected:
int m_pro;
private:
int m_pri;
};
class CSon :public CFather
{
public:
void show() {
cout << m_pub << endl;
cout << m_pro << endl;
}
protected:
private:
};
class CSonSon :public CSon
{
public:
void play() {
cout << "m_pro" << endl;
}
protected:
private:
};
int main() {
CSon son;
son.m_pub = 13;
system("pause");
return 0;
}
三种继承方式之protected
继承方式 | 父类 | 子类 |
---|
protected: | private | 不可访问 |
| protected | protected |
| public | protected |
class CFather
{
public:
int m_pub;
CFather() {
m_pub = 10;
m_pro = 11;
m_pri = 12;
}
protected:
int m_pro;
private:
int m_pri;
};
class CSon :protected CFather
{
public:
void show() {
cout << m_pub << endl;
cout << m_pro << endl;
}
protected:
private:
};
class CSonSon :protected CSon
{
public:
void play() {
cout << "m_pro" << endl;
cout << "m_pub" << endl;
}
protected:
private:
};
int main() {
CSon son;
CSonSon sonson;
sonson.play();
system("pause");
return 0;
}
三种继承方式之private
继承方式 | 父类 | 子类 |
---|
private: | private | 不可访问 |
| protected | private |
| public | private |
class CFather
{
public:
int m_pub;
CFather() {
m_pub = 10;
m_pro = 11;
m_pri = 12;
}
protected:
int m_pro;
private:
int m_pri;
};
class CSon :private CFather
{
public:
void show() {
cout << m_pub << endl;
cout << m_pro << endl;
}
protected:
private:
};
class CSonSon :private CSon
{
public:
void play() {
}
protected:
private:
};
int main() {
CSon son;
system("pause");
return 0;
}
继承下的构造和析构
class CFather {
public:
int m_a;
CFather(int a) {
m_a = a;
cout << "CFather(int a)" << endl;
}
~CFather() {
cout << "~~CFather" << endl;
}
};
class Cson :public CFather {
public:
Cson(int a) :CFather(a) {
cout << "CSon" << endl;
}
~Cson() {
cout << "~~CSon" << endl;
}
};
int main() {
{
Cson son(111);
cout << son.m_a << endl;
}
system("pause");
return 0;
}
父类的指针
class CFather{
public:
int m_fa;
void Show(){
cout<<this<<endl;
cout<<"Show()"<<endl;
}
};
class CSon:public CFather{
};
int main() {
CSon son ;
cout<<&son<<endl;
son.Show();
CFather* pFa = &son;
cout << &pFa << endl;
cout << &*pFa << endl;
system("pause");
return 0;
}
class People {
public:
void play() {
cout << "play" << endl;
}
};
class CYellowPeople : public People {
public:
void show() {
}
};
class CWhitePeople : public People {
public:
};
void GetPlay(People* peo) {
peo->play();
}
int main() {
CYellowPeople yePoe;
GetPlay(&yePoe);
CWhitePeople whPeo;
GetPlay(&whPeo);
system("pause");
return 0;
}
类成员函数指针
void show(int a) {
}
void show(int a, int b) {
}
int main() {
show(1);
show(1, 2);
system("pause");
return 0;
}
class CFather
{
public:
void show(int a, int b, int c) {
cout << "show(int a, int b, int c)" << endl;
}
protected:
private:
};
class CTest:public CFather
{
public:
void show(int a) {
cout << "show(int a)" << endl;
}
void show(int a, int b) {
cout << "show(int a, int b)" << endl;
}
protected:
private:
};
void play() {
cout << "play" << endl;
}
void (*p_fun)() = &play;
typedef void (*P_FUN)();
typedef void (*P_FUN1)(int a, int b);
void GetPlay(P_FUN p_fun) {
(*p_fun)();
}
int main() {
CTest tst;
tst.show(1);
tst.show(1,2);
tst.CFather::show(1, 2, 3);
play();
(*p_fun)();
P_FUN p_fun1 = &play;
(*p_fun1)();
typedef void (CTest::*P_FUN2)(int a, int b);
P_FUN2 p_fun2 = &CTest::show;
CTest tst2;
(tst2.*p_fun2)(1, 2);
CTest* pTst = new CTest;
(pTst->*p_fun2)(3, 4);
GetPlay(&play);
system("pause");
return 0;
}
class People {
public:
void play() {
cout << "play" << endl;
}
};
class CYellowPeople : public People {
public:
void play() {
cout << "CYellowPeople play" << endl;
}
};
class CWhitePeople : public People {
public:
void play() {
cout << "CWhitePeople play" << endl;
}
};
typedef void (People::* P_FUN1)();
void GetPlay(People* peo, P_FUN1 p_fun) {
(peo->*p_fun)();
}
int main() {
P_FUN1 p_fun = (P_FUN1)&CYellowPeople::play;
People* pPeople = new CYellowPeople;
(pPeople->*p_fun)();
GetPlay(pPeople, (P_FUN1)&CWhitePeople::play);
system("pause");
return 0;
}