一。类的四种初始化方式
1.不使用构造函数初始化类
使用函数引用来初始化类
class MM {
public:
string& getname() {
return name;
}
int& getage() {
return age;
}
void print() {
cout << "name: " << name << endl << "age: " << age << endl;
}
private:
string name;
int age;
};
int main() {
MM mm;
mm.getname()= "wangjianghui";
mm.getage()= 25;
mm.print();
return 0;
}
结果:
注意:
函数引用是:
正确: int& getage() { return age;}//直接引用私有属性直接修改他。
错误: int& getage(int age) { return age;}
2.使用构造函数初始化类
使用构造函数初始化类,就算不写构造函数,C++也会自己有一个默认构造函数,类似下面
MM() {}
class MM {
public:
MM() { cout<<"默认构造函数已经使用" << endl; }
MM(string a, int b) {
name = a;
age = b;
}
void print() {
cout << "name: " << name << endl << "age: " << age << endl;
}
private:
string name;
int age;
};
int main() {
MM mm("wangjianghui",25);
mm.print();
cout << "使用默认构造函数" << endl;
MM mm2;
return 0;
}
3.拷贝构造函数
class MM {
public:
MM() {}
MM(string a, int b) {
name = a;
age = b;
}
MM(MM& object) {
name = object.name;
age = object.age;
}
void print() {
cout << "name: " << name << endl << "age: " << age << endl;
}
private:
string name;
int age;
};
int main() {
MM mm("wangjianghui",25);
MM mm1;
mm1 = mm;
mm.print();
return 0;
}
注意:
MM(MM& object) { name = object.name; age = object.age; }
如果不写&
MM(MM object) { name = object.name; age = object.age; }
会报错, “MM”: 非法的复制构造函数: 第一个参数不应是“MM”
4.初始化参数列表
class MM {
public:
MM(string s_name, int i_age) :name(s_name), age(i_age) {}
void print() {
cout << name <<'\t' << age << endl;
}
private:
string name;
int age;
};
int main() {
MM mm("wangjianghui", 25);
mm.print();
return 0;
}