virtual

1、基本介绍
  • virtual 让派生类重写函数,通过基类指针 / 引用调用时,执行实际对象的版本
2、演示
class Animal {
public:
	virtual void speak() { cout << "???" << endl; }
};

class Dog : public Animal {
public:
	void speak() override { cout << "Woof" << endl; }
};

Animal* a = new Animal();
Animal* d = new Dog();

a->speak();
d->speak();
# 输出结果

???
Woof

虚函数与纯虚函数

1、基本介绍
维度 虚函数 纯虚函数
写法 virtual void func() virtual void func() = 0
是否有实现 必须提供 不提供
类能否实例化 能(具体类) 不能(抽象类)
派生类必须重写 否,不重写则用基类版本 是,除非派生类也想当抽象类
2、演示
  1. 虚函数
class Animal {
public:
    virtual void speak() { cout << "???"; }
};

class Dog : public Animal {
public:
    void speak() override { cout << "Woof"; }
};

Animal* p = new Dog();

p->speak();
  1. 纯虚函数
class Shape {
public:
	virtual double area(int r) = 0;
};

class Circle : public Shape {
public:
	double area(int r) override { return 3.14 * r * r; }
};
3、注意事项
  1. 纯虚函数的 = 0 是固定语法,没有替代写法

  2. 纯虚函数也可以有实现体(?)

class Animal {
public:
    virtual void speak() = 0;
};

void Animal::speak() { 
    cout << "???"; 
}

class Dog : public Animal {
public:
    void speak() override { 
        Animal::speak();
    }
};

更多推荐