我有一个名为Enemy
的类,Ninja
继承了它的属性。在Ninja
的攻击函数中,我正在尝试调用Ninja
的{{1}}函数,但我该如何获取它。我试着打电话给getAttackPower
,但是没有用。
this.getAttackPower
以下是我遇到的错误:
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
class Enemy {
int attackPower;
public:
virtual void attack() { cout << "I am attacking you!"; }
protected:
int getAttackPower() {
return attackPower;
}
void setAttackPower( int a ) {
attackPower = a;
}
};
class Ninja : public Enemy {
void attack() {
cout << "(minus " << getAttackPower() << " points).";
// .................. right here ......
}
};
int main() {
Ninja ninjaObj;
ninjaObj.setAttackPower(23);
ninjaObj.getAttackPower();
}
答案 0 :(得分:3)
您的问题出在main
而不是attack
。您将Enemy::setAttackPower(int)
和Enemy::getAttackPower()
的访问修饰符设置为protected
。这意味着这些方法被视为private
,除非你在扩展敌人的类中。
这意味着当您在main
时,它无法访问ninjaObj.setAttackPower(23)
,因为main
超出任何对象的范围。
但是,如果您拨打ninjaObj.attack()
,它也会失败,因为您没有为Ninja::attack()
设置访问修饰符,因此默认为私有。
要解决此问题:在public:
前添加Ninja::attack()
,不要在Enemy::setAttackPower(int)
中致电Enemy::getAttackPower()
或main
。