如何从对象方法中访问对象属性?

时间:2012-07-16 16:05:49

标签: c++

我有一个名为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();

}

1 个答案:

答案 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