如何从对象方法中访问对象属性
How to access object properties from within object method?
我有一个名为Enemy
的类,Ninja
从中继承其属性。在Ninja
的攻击函数中,我试图调用Ninja
的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();
}
以下是我得到的错误:
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()
。
相关文章:
- 按基类对象访问派生类资源时出错
- 使用基类对象访问派生的仅类方法
- 从 const 对象访问非 const 方法
- 如何在C++中使用类对象访问指针数据成员
- 如何通过不同的指针使用类的对象访问结构?(链表)(C++)
- 使用二进制搜索树中的迭代器对象访问左侧节点
- 为什么引用类型在使用临时对象访问时是左值
- 从父对象 c++ 访问子方法
- 无法通过指针或对象 c++ 访问受保护的成员
- 为什么可以从类中的对象访问类的私有变量
- 对类似"struct {double, int}"对象使用reinterpret_cast进行对象访问
- 通过无符号 char 别名进行对象访问,加载和存储时会发生什么?
- 从对象访问结构枚举
- 如何全局创建对象并使用该对象访问全局范围内的公共成员函数
- 在C 中,可以从第三个共享对象访问其他两个不同共享对象
- 如何在C 中提供一个可呼叫的对象访问,例如lambda
- C 向量对象访问
- C++是否可以从同级第二个派生对象访问第一个派生对象的受保护基础数据成员?
- 如何从类内实例化的对象访问私有变量
- 多态性:通过类文本或对象访问静态成员