c++ - 类对象属性可以调用返回属性在 C++ 中应具有的值的方法吗?
问题描述
为什么我不能简单地调用一个类对象属性(即),该属性调用一个返回该属性应具有的值sum
的调用方法(即)?calculateSum()
我在这里俯瞰什么?我知道 getter 和 setter 函数通常是如何使用的,但我喜欢简单地调用一个属性的快捷方式,然后用一个方法对其自身进行更新?
实体.h:
class Entity {
public:
Entity(int x, int y);
~Entity();
int x, y;
int sum = calculateSum();
private:
int calculateSum();
};
实体.cpp:
#include "Entity.h"
Entity::Entity(int x, int y) {
this->x = x;
this->y = y;
}
Entity::~Entity() {
}
int Entity::calculateSum() {
return x + y;
}
主.cpp:
#include <iostream>
#include "Entity.h"
int main() {
entity = Entity(5, 7);
std::cout << entity.sum << std::endl; // outputs 0, should be 12!!
}
这甚至可能吗?或者有其他选择吗?
谢谢。:)
解决方案
在您的代码中,类的初始化顺序Entity
是:
x
默认初始化为不确定值y
默认初始化为不确定值sum
被初始化为calculateSum()
- 执行构造函数的主体(
x
并y
分配给函数参数)。
如您所见,当sum
从 初始化数据成员时calculateSum()
,其中使用了数据成员x
和y
但它们只是default-initialized,仍然没有按照您在构造函数主体中的预期分配。
您可以在成员初始化器列表中初始化它们。
Entity::Entity(int x, int y) : x(x), y(y) {
}
那么顺序将是(在概念上与上面相同,但效果会发生变化):
x
直接初始化为构造函数参数x
y
直接初始化为构造函数参数y
sum
被初始化为calculateSum()
- 构造函数的主体被执行(什么都不做)
推荐阅读
- django - 如何将标志传递给 DRF 中的子序列化程序
- python - 模型字段的表单在 django admin 中消失
- javascript - 如何在本机反应中在控制台中显示整个对象
- outlook - AppleScript 更改 Outlook 签名
- ruby-on-rails - ActiveRecord 存在吗?缓存
- javascript - 我希望我的 html 网站以不同的语言加载
- r - bs_embed_popover 与闪亮仪表板
- java - ConcurrentSkipListMap 添加泛型类中定义的比较器
- python - 查找两个字符串模式之间的文本
- java - 可以将服务器配置为禁用自签名证书吗?