尼克是一位好学的学生,他经常做实验。有一天他在做实验的时候需要交换一瓶 1 0 10 毫升的红墨水和一瓶 2 0 20 毫升的蓝墨水,但他不会,便向狐狸老师求助,狐狸老师念了一句咒语“阿布拉”帮助了尼克。试编一程序,模拟这一过程。c++
时间: 2024-10-03 15:01:21 浏览: 48
为了编写一个简单的C++程序来模拟这个场景,我们可以创建两个`class`来代表墨水瓶,并包含一个成员函数用于交换容量。首先,我们定义一个基础`InkBottle`类,然后定义一个派生类`RedInkBottle`和`BlueInkBottle`来分别表示红墨水和蓝墨水,最后编写一个主函数来演示交换。
```cpp
#include <iostream>
// 定义基本的墨水瓶类
class InkBottle {
protected:
int capacity;
public:
InkBottle(int initial_capacity) : capacity(initial_capacity) {}
// 交换容量的方法模板
virtual void swapContents(InkBottle& other) {
int temp = capacity;
capacity = other.capacity;
other.capacity = temp;
}
// 打印墨水瓶信息
void display() {
std::cout << "This is a " << (capacity > 0 ? "full" : "empty") << " ink bottle with " << capacity << " ml.\n";
}
};
// 红墨水瓶派生类
class RedInkBottle : public InkBottle {
public:
RedInkBottle(int initial_capacity) : InkBottle(initial_capacity) {}
};
// 蓝墨水瓶派生类
class BlueInkBottle : public InkBottle {
public:
BlueInkBottle(int initial_capacity) : InkBottle(initial_capacity) {}
};
int main() {
// 创建两个墨水瓶对象
RedInkBottle red(10);
BlueInkBottle blue(20);
// 显示初始状态
red.display();
blue.display();
// 使用虚拟函数交换内容
red.swapContents(blue);
blue.swapContents(red); // 因为是交换,所以两次调用
// 显示交换后的状态
red.display();
blue.display();
return 0;
}
```
在这个程序中,`swapContents`是一个虚函数,当我们在`main`中通过红墨水瓶对象调用它时,会调用`BlueInkBottle`类中的相应方法。狐狸老师的咒语在这里就表现为这个灵活的行为。
阅读全文