c++改错题,以下代码能够编译但不能运行。是什么原因呢?main函数中创建的类对象可以作为一个函数的参数吗

#include <iostream>

using namespace std;

class Myclass {
public:
friend void SetMember(Myclass &my, char);
friend void SetMember(Myclass &my, char, char);

private:
char my_char1;
char my_char2;
};

void SetMember(Myclass &my, char mem1) {
my.my_char1 = mem1;
}

void SetMember(Myclass &my, char mem1, char mem2) {
my.my_char1 = mem1;
my.my_char2 = mem2;
}

int main() {
Myclass obj;
SetMember(obj, 5);
SetMember(obj, 7, 9);
return 0;
}

可以运行啊,没有任何问题:

对于你的第二个问题,回答也是 当然可以了。。

追问

那obj作为参数默认为0吗?

那obj作为参数默认为0吗?

追答

Myclass obj;

如果像这样定义一个对象的话,它调用的是默认构造函数来初始化obj对象中的属性my_char1、my_char2,

你这里没有显式的定义默认构造函数,编译器会给你合成一个。合成版本里的初始化原则是内置类型(比如你的这两个属性的类型char)变量是不做初始化,是个随机值。而如果要有类类型的属性,这个属性会调用自己类的默认构造函数初始化。

温馨提示:答案为网友推荐,仅供参考