这是一个简单的事情,我不确定它是否可以在C++中像其他语言一样.事物的行为就像它是一个副本,但不是同一个对象.我希望如果这是结构,或其他一些值类型 - 这将是预期的行为,但对于类,我期望这表现得像我正在看"引用",即 - 与数组中的相同对象.我究竟做错了什么?
// Example program
#include <iostream>
#include <string>
class someclass
{
public:
void setn(int n2);
int n=10;
};
void someclass::setn(int n2){
n=n2;
};
int main()
{
someclass moreofthem[5];
someclass my=moreofthem[1];
std::cout << "start value: " << my.n << " as inital\n"; //10
my.setn(2);
std::cout << "new value: " << my.n << " as expected\n"; //2
std::cout << "value in list: " << moreofthem[1].n << " why?\n"; //10?
}
Run Code Online (Sandbox Code Playgroud)
与C#不同,C++不区分a struct和a class.实际上,这两者是完全可互换的,并且遵循价值语义.
幸运的是,C++还提供了作为语言结构的引用和指针,使您可以处理对类和结构实例的引用:
someclass moreofthem[5];
someclass& my = moreofthem[1];
// ^
// That's it! Now you have yourself a reference
std::cout << "start value: " << my.n << " as inital\n"; //10
my.setn(2);
Run Code Online (Sandbox Code Playgroud)
或者如果你更喜欢指针
someclass moreofthem[5];
someclass* my = &moreofthem[1];
// ^ ^
// declare and use a pointer; note -> below
std::cout << "start value: " << my.n << " as inital\n"; //10
my->setn(2);
Run Code Online (Sandbox Code Playgroud)
与C#不同,其中a class确保实例通过引用处理(代表C++引用和C++指针之间的混合)C++允许您决定如何处理实例 - 按值,按引用或通过指针.该行为接近于C#ref的值传递类型对象的参数,但它在所有上下文中都可用,包括实例和局部变量.这使您可以更灵活地通过引用或不同上下文中的值处理同一对象.