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)、接口是一种特殊的抽象类

  • 相关阅读:
    【TensorFlow】tf.nn.max_pool实现池化操作
    nginx页面不能正常访问排除方法
    Nginx启动错误:error while loading shared libraries: libpcre.so.1
    解决:make:cc 命令未找到的解决方法
    spring mvc:练习:表单验证(javaConfig配置和注解)
    spring mvc:练习:javaConfig配置和注解
    SpringMvc中的校验框架@valid和@validation的概念及相关使用 和BindingResult bindingResult
    springmvc的@Validated/@Valid注解使用和BindingResult bindingResult
    spring MVC注解深入研究
    spring mvc: 注解和JavaConfig实例
  • 原文地址:https://www.cnblogs.com/gui-lin/p/6369785.html
Copyright © 2011-2022 走看看