yell是派生类的函数
时间: 2023-12-04 08:05:05 浏览: 31
如果 `yell` 是派生类的函数,且需要在基类的 `fight` 函数中调用,可以将 `yell` 函数声明为虚函数,然后在派生类中重写该函数。这样,在调用 `fight` 函数时,会自动调用派生类的 `yell` 函数。示例代码如下:
```
class warrior {
public:
virtual void yell(int i) {
cout << "Warrior yells " << i << endl;
}
void fight(warrior& a, int i) {
a.yell(i);
}
};
class derived_warrior : public warrior {
public:
void yell(int i) override {
cout << "Derived warrior yells " << i << endl;
}
};
```
在上面的代码中,`yell` 被声明为虚函数,并在派生类 `derived_warrior` 中进行了重写,所以当调用 `fight` 函数时,若 `a` 是 `derived_warrior` 的对象,就会调用派生类的 `yell` 函数。
相关问题
void warrior::fight(warrior& a, int i) a.yell(i);a调用的是派生类的成员函数yell,代码该如何修改
可以使用作用域解析运算符 `::` 来指定调用基类的成员函数。代码如下:
```
void warrior::fight(warrior& a, int i) {
warrior::yell(i);
}
```
这样就可以在 `fight` 函数中调用基类 `warrior` 的成员函数 `yell` 了。
用观察者模式实现猫大叫老鼠淘宝,主人被惊醒
好的,这是一个经典的观察者模式的例子。
首先,我们需要定义三个类:猫(Cat)、老鼠(Mouse)和主人(Owner)。
猫(Cat)类有一个叫(yell)的方法,在这个方法中,我们通知所有的观察者(老鼠和主人)这只猫正在大叫。
老鼠(Mouse)和主人(Owner)类都有一个更新(update)方法,用于接收到猫叫的通知后做出相应的行动。
观察者模式的实现过程如下:
```python
# 猫类
class Cat:
def __init__(self):
self.observers = []
# 添加观察者
def attach(self, observer):
self.observers.append(observer)
# 通知所有观察者
def notify(self):
for observer in self.observers:
observer.update()
# 猫叫
def yell(self):
print("猫大叫!")
self.notify()
# 老鼠类
class Mouse:
def __init__(self, name):
self.name = name
# 更新方法
def update(self):
print("老鼠{}听到猫叫,赶紧逃跑!".format(self.name))
# 主人类
class Owner:
def __init__(self, name):
self.name = name
# 更新方法
def update(self):
print("主人{}听到猫叫,被惊醒了!".format(self.name))
# 测试代码
if __name__ == '__main__':
# 创建猫、老鼠和主人对象
cat = Cat()
mouse1 = Mouse("Tom")
mouse2 = Mouse("Jerry")
owner = Owner("Jack")
# 添加观察者
cat.attach(mouse1)
cat.attach(mouse2)
cat.attach(owner)
# 猫叫,观察者做出相应的行动
cat.yell()
```
运行上述代码,输出结果如下:
```
猫大叫!
老鼠Tom听到猫叫,赶紧逃跑!
老鼠Jerry听到猫叫,赶紧逃跑!
主人Jack听到猫叫,被惊醒了!
```
可以看到,猫叫后,所有的观察者都做出了相应的行动。老鼠逃跑,主人被惊醒了。这就是观察者模式的作用。