题目1:动物园管理系统(多态性)
描述:
设计一个动物园管理系统,包含一个基类Animal和两个派生类Lion和Elephant。每种动物都有一个makeSound()方法,返回它们的叫声。实现多态性,使得可以通过基类指针调用派生类的makeSound()方法。
#include <iostream>
#include <string>
using namespace std; // 使用标准命名空间
class Animal {
public:
virtual string makeSound() const = 0; // 纯虚函数
};
class Lion : public Animal {
public:
string makeSound() const override { // override 是一个指示符,用于表明该函数是重写基类中的虚函数。
return "Roar"; // 狮子的叫声
}
};
class Elephant : public Animal {
public:
string makeSound() const override {
return "Trumpet"; // 大象的叫声
}
};
int main() {
Animal* animals[2];
animals[0] = new Lion();
animals[1] = new Elephant();
for (int i = 0; i < 2; ++i) {
cout << "Animal sound: " << animals[i]->makeSound() << endl; // 省略 std::
}
return 0;
}
题目2:图形绘制系统
描述:
设计一个图形绘制系统,包含一个基类Shape和两个派生类Triangle和Square。每种图形都有一个draw()方法,用于绘制图形,并且都有一个area()方法,计算图形的面积。
#include <iostream>
#include <cmath>
using namespace std; // 使用标准命名空间
class Shape {
public:
virtual void draw() const = 0; // 纯虚函数
virtual double area() const = 0; // 纯虚函数
};
class Triangle : public Shape {
private:
double base, height;
public:
Triangle(double b, double h) : base(b), height(h) {}
void draw() const override {
cout << "Drawing a Triangle with base: " << base << " and height: " << height << endl;
}
double area() const override {
return 0.5 * base * height; // 三角形的面积
}
};
class Square : public Shape {
private:
double side;
public:
Square(double s) : side(s) {}
void draw() const override {
cout << "Drawing a Square with side: " << side << endl;
}
double area() const override {
return side * side; // 正方形的面积
}
};
int main() {
Shape* shapes[2];
shapes[0] = new Triangle(3.0, 4.0);
shapes[1] = new Square(5.0);
for (int i = 0; i < 2; ++i) {
shapes[i]->draw();
cout << "Area: " << shapes[i]->area() << endl;
}
return 0;
}