zoukankan      html  css  js  c++  java
  • 第五十二课、c++中的抽象类和接口

    一、c++中的抽象类与纯虚函数

    1、面向对象中抽象的概念

    (1)、现实中需要知道具体图形的类型才能求面积

    (2)、图形类只是概念上的类型没有具体对象

    2、面向对象中的抽象类

    (1)、可用于表示现实世界中的抽象概念

    (2)、是一种只能定义类型,而不能产生对象的类

    (3)、只能被继承并重写相关的函数

    (4)、直接特征是相关函数没有完整实现

    3、c++中没有抽象类的概念

    (1)、c++通过纯虚函数实现抽象类

    (2)、纯虚函数是只定义原型的成员函数

    (3)、一个c++类中存在纯虚函数就成了抽象类

    4、抽象类与纯虚函数的特点

    (1)、抽象类只能用作父类被继承

    (2)、子类必须实现纯虚函数的具体功能

    (3)、纯虚函数被实现后成为虚函数

    (4)、如果子类没有实现纯虚函数,则子类成为抽象类

    #include<iostream>
    
    using namespace std;
    
    //抽象类
    class Shape { public: virtual double area() = 0; //纯虚函数 };
    //矩形
    class Rect : public Shape { private: int ma; int mb; public: Rect(int a, int b) { ma = a; mb = b; } double area() { return ma*mb; } };
    //圆
    class Circle : public Shape { private: int mr; public: Circle(int r) { mr = r; } double area() { return 3.14*mr*mr; } }; void area(Shape* p)//但是可以定义指针,指向的是子类对象 { double r = p->area();//子类中重写后成为虚函数,展现多态 cout << "r = " << r << endl; } int main() { Rect rect(4, 5); Circle circle(10);

    //Shape s;//报错,抽象类不能产生对象 area(
    &rect);//20 area(&circle);//314 return 0; }

    二、c++类的接口

    (1)、类中没有定义任何成员变量

    (2)、所有的成员函数都是公有的

    (3)、所有的成员函数都是纯虚函数

    (4)、接口是一种特殊的抽象类

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    //类中无成员变量
    //特殊的抽象类
    class Channel { public://成员函数均为public virtual bool open() = 0;//成员函数均为虚函数 virtual void close() = 0; virtual bool send(char* buf, int len) = 0; virtual int receive(char* buf, int len) = 0; }; int main() { return 0; }

    三、小结

    (1)、抽象类用于描述现实世界中的抽象概念  

    (2)、抽象类只能被继承不能创建对象

    (3)、c++中没有抽象类的概念

    (4)、c++通过纯虚函数实现抽象类

    (5)、类中只存在纯虚函数的时候成为接口

    (6)、接口是一种特殊的抽象类

  • 相关阅读:
    ZOJ3213-Beautiful Meadow
    ZOJ3256-Tour in the Castle
    ZOJ3466-The Hive II
    hdu3377-Plan
    fzu1977-Pandora Adventure
    ural1519-Formula 1
    poj2914-Minimum Cut
    51nod-1220-约数之和
    51nod-1222-最小公倍数计数
    【html】【6】div浮动float
  • 原文地址:https://www.cnblogs.com/gui-lin/p/6369785.html
Copyright © 2011-2022 走看看