C++ 抽象类 和纯虚函数详解

这里写目录标题

  • 纯虚函数的描述
  • 抽象类的描述

纯虚函数的描述

在class或者struct中,的函数,只定义了函数类型,但是没有函数体,并且给函数初始化 = 0 如下: speak()和run()就是2个纯虚函数

class Person{
public:
    virtual void speak() = 0;//纯虚函数,只定义了函数类型,没有函数体.相当于oc和swift中的协议里定义的方法
    virtual void run() = 0;
};

抽象类的描述

C++相当于oc和swift中的协议,不能直接创建类,C++中的抽象类,是只要包含一个纯虚函数,就是抽象类
上面代码 Person类就是抽象类,因为里面包含了纯虚函数.下面代码因为Student没有把父类中的所有纯虚函数都实现,所以依然是抽象类,不能用来创建对象

class Student: public Person{
public:
    void speak() {
        cout<< "Student speak()"<<endl;
    }
    //student 没有完全实现纯虚函数,依然是抽象类 ,不能创建对象

};

下面代码,Worker实现了所有父类中的纯虚函数,所以不是抽象类,可以被初始化.

class Worker: public Person{
public:
    void speak() {
        cout<< "Worker speak()"<<endl;
    }
    //student 没有完全实现纯虚函数,依然是抽象类 ,不能创建对象
    void run() {
        cout<< "Worker run()"<<endl;
    }
};
Person s = Person();//报错,抽象类不能创建对象
Student s = Student();//报错 1student 没有完全实现纯虚函数,依然是抽象类 ,不能创建对象
Worker w = Worker();//实现了所有的纯虚函数,不再是抽象类,可以创建对象

关于抽象类的作用,跟oc和swift的协议一样,只是声明方法用,在oc和swift中可以用来继承多个协议.相当于继承了多个父类,只不过父类必须是协议.

你可能感兴趣的:(c++,c++,纯虚函数,抽象类,virtual)