继承使子类复用父类成员,多态通过虚函数实现运行时动态绑定;示例中Animal为基类,Dog和Cat继承并重写makeSound,通过基类指针调用实现不同行为。

在C++中,继承和多态是面向对象编程的两个核心特性。通过继承,子类可以复用父类的成员变量和方法;通过多态,可以在运行时根据对象的实际类型调用对应的函数。下面通过一个简单示例说明如何实现。
1. 继承的基本实现
继承允许一个类(派生类)获取另一个类(基类)的属性和方法。使用冒号 : 来指定继承关系。
class Animal {public:
void eat() {
cout << "Animal is eating." << endl;
}
virtual void makeSound() {
cout << "Animal makes a sound." << endl;
}
};
class Dog : public Animal {
public:
void makeSound()
override {
cout << "Dog barks: Woof!" << endl;
}
};
class Cat : public Animal {
public:
void makeSound()
override {
cout << "Cat meows: Meow!" << endl;
}
};
2. 多态的实现方式
多态依赖于虚函数和指针或引用。将基类中的函数声明为 virtual,在派生类中重写该函数,再通过基类指针或引用调用,就能实现运行时多态。
int m
ain() {
Animal* animal1 =
new Dog();
Animal* animal2 =
new Cat();
animal1->makeSound(); // 输出: Dog barks: Woof!
animal2->makeSound(); // 输出: Cat meows: Meow!
delete animal1;
delete animal2;
return 0;
}
3. 关键点说明
- 基类中需要将希望被重写的函数声明为 virtual,否则无法实现动态绑定。
- 使用 override 关键字明确表示重写虚函数,有助于编译器检查错误。
- 多态只能通过指针或引用触发,直接定义对象调用不会体现多态行为。
- 若基类有虚函数,建议定义虚析构函数,防止内存泄漏。
4. 完整示例代码
把上面所有部分组合起来:
立即学习“C++免费学习笔记(深入)”;
#include <iostream>using namespace std;
class Animal {public:
virtual void makeSound() {
cout << "Animal makes a sound." << endl;
}
virtual ~Animal() =
default; // 虚析构函数
};
class Dog : public Animal {
public:
void makeSound()
override {
cout << "Woof!" << endl;
}
};
class Cat : public Animal {
public:
void makeSound()
override {
cout << "Meow!" << endl;
}
};
int main() {
Animal* pets[] = {
new Dog(),
new Cat()};
for(
int i = 0; i < 2; ++i) {
pets[i]->makeSound();
}
for(
int i = 0; i < 2; ++i) {
delete pets[i];
}
return 0;
}
基本上就这些。理解虚函数表和动态绑定机制能更深入掌握多态底层原理,但在日常开发中,按上述模式使用已足够应对大多数场景。注意设计基类接口时要合理,避免过度继承。不复杂但容易忽略的是虚析构函数和 override 的使用。
以上就是c++++怎么实现继承和多态_c++继承与多态实现示例的详细内容,更多请关注php中文网其它相关文章!