#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)变量是不做初始化,是个随机值。而如果要有类类型的属性,这个属性会调用自己类的默认构造函数初始化。