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

How to access object properties from within object method?

本文关键字:对象 访问 属性 方法      更新时间:2023-10-16

我有一个名为Enemy的类,Ninja从中继承其属性。在Ninja的攻击函数中,我试图调用NinjagetAttackPower函数,但如何获得它。我尝试调用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();
}

以下是我得到的错误:

void Enemy::setAttackPower(int) is protected
error: within this context
error: 'int Enemy::getAttackPower()' is protected
error: within this context

问题出在main而不是attack。您将Enemy::setAttackPower(int)Enemy::getAttackPower()的访问修饰符设置为protected。这意味着这些方法被视为private,除非您在扩展Enemy的类中。

这意味着当您在main中时,它无法访问ninjaObj.setAttackPower(23),因为main在任何对象的范围之外。

但是,如果您调用ninjaObj.attack(),它也会失败,因为您没有为Ninja::attack()设置访问修饰符,所以它默认为private

要修复:在Ninja::attack()前面添加public:,不要在main中调用Enemy::setAttackPower(int)Enemy::getAttackPower()