ssy/all.cpp
2024-08-05 23:12:46 +08:00

91 lines
1.9 KiB
C++

#include <iostream>
#include <string>
// 基类(父类)
class Animal {
public:
// 虚函数,用于实现多态
virtual void makeSound() {
std::cout << "Some generic animal sound" << std::endl;
}
// 公共方法
void eat() {
std::cout << "Eating..." << std::endl;
}
};
// 派生类(子类)
class Dog : public Animal {
private:
std::string name;
int age;
public:
// 构造函数
Dog(std::string n, int a) : name(n), age(a) {}
// 重载虚函数,实现多态
void makeSound() override {
std::cout << "Woof!" << std::endl;
}
// 设置名字(封装)
void setName(std::string n) {
name = n;
}
// 获取名字(封装)
std::string getName() {
return name;
}
// 设置年龄(封装)
void setAge(int a) {
age = a;
}
// 获取年龄(封装)
int getAge() {
return age;
}
};
// 另一个派生类(子类)
class Cat : public Animal {
public:
// 重载虚函数,实现多态
void makeSound() override {
std::cout << "Meow!" << std::endl;
}
};
int main() {
// 创建Dog对象
Dog myDog("Buddy", 3);
myDog.eat(); // 输出: Eating...
myDog.makeSound(); // 输出: Woof!
// 使用封装方法设置和获取属性
myDog.setName("Max");
std::cout << "Dog's name: " << myDog.getName() << std::endl; // 输出: Dog's name: Max
myDog.setAge(4);
std::cout << "Dog's age: " << myDog.getAge() << std::endl; // 输出: Dog's age: 4
// 创建Cat对象
Cat myCat;
myCat.eat(); // 输出: Eating...
myCat.makeSound(); // 输出: Meow!
// 多态演示
Animal* animals[2];
animals[0] = &myDog;
animals[1] = &myCat;
for (int i = 0; i < 2; i++) {
animals[i]->makeSound(); // 输出: Woof! 和 Meow!
}
return 0;
}