c++之——抽象基类

在一个虚函数的声明语句的分号前加上 =0;就可以将一个虚函数变成纯虚函数,其中,=0只能出现在类内部的虚函数声明语句处。纯虚函数只用声明,而不用定义,其存在就是为了提供接口,含有纯虚函数的类是抽象基类。我们不能直接创建一个抽象基类的对象,但可以创建其指针或者引用。值得注意的是,你也可以为纯虚函数提供定义,不过函数体必须定义在类的外部。但此时哪怕在外部定义了,也是纯虚函数,不能构建对象。

派生类构造函数只初始化它的直接基类。多继承的虚继承除外。

eg:

 

 1 #include<iostream>
 2 using namespace std;
 3 //四边形
 4 class Quadrilateral {
 5 public:
 6     virtual void print_area() = 0;
 7 };
 8 //正方形
 9 class Square :public Quadrilateral
10 {
11 public:
12     Square(int c):a(c){}
13      void print_area()override
14     {
15          cout << "square " << a*a << endl;
16     }
17 private:
18     int a;
19 
20 };
21 //矩形
22 class Rectangle:  public Quadrilateral
23 {
24 public:
25     Rectangle(int a,int b) :R_long(a),R_width(b)
26     {
27         
28     }
29     void print_area()override
30     {
31         cout << "rectangle " << R_long*R_width << endl;
32     }
33 private:
34     int R_long;
35     int R_width;
36 };
37 
38 void paly(Quadrilateral &obj)
39 {
40     obj.print_area();
41 }
42 int main()
43 {
44     Square s1(10);
45     Rectangle r1(10, 20);
46     paly(s1);
47     paly(r1);
48 
49     return 0;
50 }

 

这样用纯虚函数构建的抽象基类,能够为架构提供接口,如果现在要在前人代码的基础上增加一个平行四边形的面积打印,只用增加一个平行四边形的类,调用paly函数,不用再去更改原有的任何代码,而是在原有正确代码的基础上复用,这是构架的基础。纯虚函数应该在派生类中重写,否则派生类也是抽象类,不能实例化。

就像友元关系不能传递一样,友元关系同样不能继承,基类的友元在访问派生类成员时不具有特殊性,类似的,派生类的友元也不能随意访问基类的成员。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值