zoukankan      html  css  js  c++  java
  • 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函数,不用再去更改原有的任何代码,而是在原有正确代码的基础上复用,这是构架的基础。纯虚函数应该在派生类中重写,否则派生类也是抽象类,不能实例化。

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

  • 相关阅读:
    opencv imdecode和imencode用法
    caffe网络中屏蔽某一层的输出Silence层
    Opencv画图操作
    linux读取Windows的txt文件问题
    yolo检测系列
    c提取文件路径、文件名和后缀名
    draknet网络配置参数
    darknet源码解析
    Web_Toy
    Heart thing
  • 原文地址:https://www.cnblogs.com/yangguang-it/p/6558289.html
Copyright © 2011-2022 走看看