C++ - 面向对象 - virtual、虚函数与纯虚函数
·
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、演示
- 虚函数
class Animal {
public:
virtual void speak() { cout << "???"; }
};
class Dog : public Animal {
public:
void speak() override { cout << "Woof"; }
};
Animal* p = new Dog();
p->speak();
- 纯虚函数
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、注意事项
-
纯虚函数的
= 0是固定语法,没有替代写法 -
纯虚函数也可以有实现体(?)
class Animal {
public:
virtual void speak() = 0;
};
void Animal::speak() {
cout << "???";
}
class Dog : public Animal {
public:
void speak() override {
Animal::speak();
}
};
更多推荐

所有评论(0)