在更改 SubsidiaryClass 的变量成员时,似乎有一个隐含的 const 不允许使用 getSubsiaryClass() ,但它对于读取变量来说效果很好。 这不是一个公共/私人问题,我已经研究过了。 为什么第二种和第三种方法有效,而第一种方法不行?
任何人都可以帮助我理解为什么会发生这种情况吗? [或者告诉我在哪里可以找到答案,这是我的第一篇文章,我不确定协议]
#include <iostream>
class SubsidiaryClass {
private:
double little_double;
public:
double getLittleDouble() {return little_double;}
void putLittleDouble(double input) {little_double = input; return;}
};
class ParentClass {
private:
double little_double;
SubsidiaryClass subsidiary_class;
public:
double getLittleDouble() {return little_double;}
void putLittleDouble(double input) {little_double = input; return;}
SubsidiaryClass getSubsidiaryClass() {return subsidiary_class;}
SubsidiaryClass& getSubsidiaryClassReference() {return subsidiary_class;}
SubsidiaryClass* getSubsidiaryClassPointer() {return &subsidiary_class;}
};
int main() {
ParentClass parent_class;
parent_class.getSubsidiaryClass().putLittleDouble(1.1); // does not work, no error message
std::cout << parent_class.getSubsidiaryClass().getLittleDouble() << std::endl;
parent_class.getSubsidiaryClassReference().putLittleDouble(2.2); // works fine
std::cout << parent_class.getSubsidiaryClassReference().getLittleDouble() << std::endl;
std::cout << parent_class.getSubsidiaryClass().getLittleDouble() << std::endl;
parent_class.getSubsidiaryClassPointer() -> putLittleDouble(3.3); // works fine
std::cout << parent_class.getSubsidiaryClassPointer() -> getLittleDouble() << std::endl; // works fine
std::cout << parent_class.getSubsidiaryClass().getLittleDouble() << std::endl;
return 0;
}
在这一行中:
parent_class.getSubsidiaryClass().putLittleDouble(1.1);
getSubsidiaryClass()
返回一个SubsidiaryClass
对象按值,因此它返回一个副本。 然后,您在该副本上调用 putLittleDouble()
,因此任何修改都不会反映在原始对象中。 这就是为什么这个表达式不报告新值的原因:
parent_class.getSubsidiaryClass().getLittleDouble()