CPP学习之——模拟抽象类(16.4)

一 概述

为了实现一个统一的指针,我们可以再定义一个类,然后由这个类派生出父类和母类,再由父类和母类共同派生出子类。

二 过程分析

  • 由于Human类没有什么实际作用,所以它是一个抽象出来的类。就像人类,它不是某个具体的人,没有什么实际功用,只是在人的大脑中抽象出来的用来概括人类的名词。不过它可以保证所有进入人类这个级别的动物都具有人类的行为或特征,不可能存在狮子或者恐龙也称为人类的这种可能
  • 由于抽象类只是一个接口类,因此我们又叫它ADT

三 示例演示及结果输出

3.1 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include<iostream>
using namespace std;
class human
{

public:
virtual void smart(){}
virtual void beautiful(){}
virtual ~human(){cout<<"析构human"<<endl;}
human(){cout<<"构造huamn"<<endl;}
};
class father:virtual public human{

public:
virtual void smart(){cout<<"父亲很聪明"<<endl;}
//virtual void beautiful(){}
father(){cout<<"构造father"<<endl;}
virtual ~father(){cout<<"析构father"<<endl;}
};
class mother:virtual public human
{
public:
virtual void beautiful(){cout<<"母亲很漂亮。。"<<endl;}
mother(){cout<<"构造mother"<<endl;}
virtual ~mother(){cout<<"析构mother"<<endl;}

};
class son:public father,public mother
{
public:
son(){cout<<"构造son"<<endl;}
virtual ~son(){cout<<"析构son"<<endl;}
virtual void beautiful(){cout<<"儿子也很帅"<<endl;}
virtual void smart(){cout<<"儿子也很聪明"<<endl;}
};
int main()
{
human *p;
int choice=0;
while(true)
{
bool quit=false;
cout<<"(0)退出(1)父亲(2)儿子(3)母亲:";
cin>>choice;
switch(choice)
{
case 0:quit=true;
break;
case 1:p=new father;
p->beautiful();
delete p;
break;
case 2:p=new son;
p->beautiful();
p->smart();
delete p;
break;
case 3:p=new mother;
p->beautiful();
delete p;
break;
default:cout<<"请输入从0到2之间的数字。";
break;
}
if(quit)
{
break;
}
}
cout<<"程序结束"<<endl;
return 0;
}

3.2 输出结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
(0)退出(1)父亲(2)儿子(3)母亲:1
构造huamn
构造father
析构father
析构human
(0)退出(1)父亲(2)儿子(3)母亲:2
构造huamn
构造father
构造mother
构造son
儿子也很帅
儿子也很聪明
析构son
析构mother
析构father
析构human
(0)退出(1)父亲(2)儿子(3)母亲:3
构造huamn
构造mother
母亲很漂亮。。
析构mother
析构human
(0)退出(1)父亲(2)儿子(3)母亲:

四 说明

  • 最后我们需要注意的是,这个抽象类不是真正的抽象类,它只是一个虚拟的抽象类,因为它的虚函数仍然具有功能,那就是什么事也不做,真正的抽象类必须具备一个或一个以上的真正的没有任何功能的虚函数,这个虚函数的存在仅仅是为了让它的子类来继承并具体化功能