这个程序展示了C++面向对象编程的基本概念,包括类和对象、封装、继承、多态和抽象。
#include <iostream>
#include <string>
#include <vector>
// 基类:抽象类(使用纯虚函数)
class Animal {
public:
// 构造函数
Animal(const std::string& name) : name(name) {}
// 虚析构函数
virtual ~Animal() {}
// 纯虚函数:抽象接口
virtual void makeSound() const = 0;
// 普通成员函数
void showName() const {
std::cout << "Animal's name is " << name << std::endl;
}
protected:
std::string name;
};
// 派生类:Dog
class Dog : public Animal {
public:
Dog(const std::string& name) : Animal(name) {}
// 重写基类的纯虚函数
void makeSound() const override {
std::cout << name << " says: Woof!" << std::endl;
}
};
// 派生类:Cat
class Cat : public Animal {
public:
Cat(const std::string& name) : Animal(name) {}
// 重写基类的纯虚函数
void makeSound() const override {
std::cout << name << " says: Meow!" << std::endl;
}
};
// 多态示例函数
void playSound(const Animal& animal) {
animal.makeSound();
}
int main() {
// 创建Dog和Cat对象
Dog myDog("Buddy");
Cat myCat("Whiskers");
// 展示封装
myDog.showName();
myCat.showName();
// 展示多态
playSound(myDog);
playSound(myCat);
// 使用指针和动态绑定
std::vector<Animal*> animals;
animals.push_back(new Dog("Rex"));
animals.push_back(new Cat("Luna"));
for (const auto& animal : animals) {
animal->makeSound();
}
// 清理内存
for (auto& animal : animals) {
delete animal;
}
return 0;
}
代码解释
-
基类
Animal
:- 包含一个纯虚函数
makeSound
,使得Animal
成为抽象类。 - 包含一个普通成员函数
showName
来展示封装的概念。
- 包含一个纯虚函数
-
派生类
Dog
和Cat
:- 分别继承自
Animal
并实现纯虚函数makeSound
。
- 分别继承自
-
多态:
- 通过
playSound
函数展示多态性,函数接受Animal
引用作为参数并调用makeSound
。
- 通过
-
使用指针和动态绑定:
- 在
main
函数中,创建一个Animal
指针的向量来存储不同的Animal
对象,并展示动态绑定。
- 在