C++:通过另一个类的方法更改类的值 - 错误
C++: Change value of class by method of another class - bug?
我有一件奇怪的事情,根据我的经验,我可以在C++中调用错误。当我调用此程序时:
#include <iostream>
using namespace std;
class foo {
public:
int a;
foo(int a = 0) : a(a) {}
} a1;
class bar {
foo a;
public:
bar(foo a = a1) : a(a) {
a.a = 1;
cout << a.a << endl;
}
void print_a() {
cout << a.a << endl;
}
};
int main() {
bar zz;
zz.print_a();
a1.a = 2;
bar zz1;
zz1.print_a();
}
输出为:
1
0
1
2
我确实希望能够更改我的类的内部成员的值,例如 bar 类中 foo 类对象的值。当我更改柱构造函数中的 a.a 值时,看起来我只更改了局部变量。这个过程的机制是什么?C++ 不会将其类中的变量视为常量参数,因为我也可以获取由方法更改的计数器。但是,当计数器更深一个级别时,结构似乎崩溃了。
在构造函数主体中,参数名称隐藏成员名称,因此正如您推测的那样,您正在修改函数参数a
,而不是成员a
。
不想重命名任一变量,可以将成员引用为 this->a
或 bar::a
以消除歧义。
相关文章:
- C++:正在检查LinkedList中的回文-递归方法-错误
- 如何确保在使用基于布尔值的两个方法之一调用方法时避免分支预测错误
- 方法内部但循环仍得到预期的不合格id错误C++
- 重载方法的方式会在使用临时调用时生成编译器错误
- 在C++中样板"冷/never_inline"错误处理技术的最佳方法是什么?
- 在C++中使用内联方法时出现未定义的符号错误
- 使用类模板的方法链接错误
- 尝试了解在导入的静态方法上使用删除方法时的错误
- 我的模板类方法返回错误类型?
- QtQuick - qml:28:错误:未知方法返回类型:自定义类型
- C++数组队列实现方法错误
- 方法错误"not all control paths return a value"和方法不返回值
- 为什么我的 setter 方法会产生错误的访问错误
- 派生类调用父类的方法,该方法调用重写的虚拟方法调用错误的方法
- 为什么调用没有正文的纯虚拟方法不会导致链接器错误?
- Android JNI 未定义对错误 c++ 方法的引用
- 这是哨兵线性搜索的错误方法吗?
- 这是重定向fork和execvp派生的子级的输出的错误方法吗
- flickcurl错误-方法flickr.oauth.access_token失败了
- 错误:方法未在此范围内声明(但已包含)