Fun::Fun() //默认构造
{
}
Fun::Fun(int a) //有参构造
{
this.age = a;
}
Fun::Fun(const int &f) //拷贝构造
{
age = f.age;
}
括号法
Fun f; //默认构造函数调用
Fun f1(10); //有参构造函数调用
Fun f2(f1); //拷贝构造函数调用
Fun f; //fun类实例化对象
Fun f1(); //你就看看吧,这和函数声明有什么区别?
void hanshushengming(); //这是一个函数声明
Fun f1(); | |
---|---|
Fun | 返回值类型 |
f1 | 函数名 |
() |
显示法
Fun f; //默认构造函数
Fun f1 = Fun(10); //有参构造函数显示调用
Fun f2 = Fun(f1); //拷贝构造函数显示调用
Fun(10) 匿名对象 特点 :当前行结束后,系统会自动回收匿名对象
Fun f2(10);
Fun(f2); //拷贝构造函数初始化匿名对象
注意:不要使用拷贝构造函数初始化匿名对象,编译器会认为Fun(f2)等价于Fun f2;f2已定义。
"Fun(10)"里面的Fun编译器理解成Fun的构造函数,传入参数10调用有参构造函数。
"Fun(f2)"里的Fun编译器理解成Fun类型,整个语句意思就变成了定义一个Fun类的变量f2。
隐式转换法
Fun f1 = 10; //等价于Fun f1 = Fun(10);
Fun f2 = f1; //等价于Fun f2 = Fun(f1);