看一下主函数中这个对象的赋值方法:
#include <iostream>
using std::cout;
using std::endl;
class A{
public:
A(int m):a(m){}
void show(){cout<<a<<endl;}
private:
int a;
};
int main(int argc, char *argv[])
{
A a=A(3);
a.show();
return 0;
}
这里面A a=A(3); 这是用的什么方法使得这个对象形成呢?
构造函数?还是复制构造函数?
答案是通过构造。
================================================================
一、直接办法:
A a(3); //这样就调用构造函数,创建a对象。
A a=A(3); //同上构造函数
二、隐匿转换:
A a=3; // 构造函数。
三、new办法:
A *a=new A(3); // 调用构造函数,在自由存储区创建。
A *a=new A(b);//假定b(3), 一样可伊娃,但使用的是复制构造函数。
四、已知对象创建:
A b(3),a=b; // 复制构造
五、列表法,同数组:
A a[3]={1,2,3}; //对应元素分别为1,2,3
由此我们来看一下例子:
#include <iostream>
using std::cout;
using std::endl;
class A{
public:
A(int m):a(m){cout<<"constructor"<<endl;}
A(const A& x){cout<<"copy"<<endl;}
void show(){cout<<a<<endl;}
private:
int a;
};
int main(int argc, char *argv[])
{
cout<<"1"<<endl;
A b(4);
cout<<"2"<<endl;
A* a=new A(3);
cout<<"3"<<endl;
A* c=new A(b);
cout<<"4"<<endl;
A d=A(4);
cout<<"5"<<endl;
A e=3;
cout<<"6"<<endl;
A f[4]={7,7,7,7};
cout<<"7"<<endl;
A h=b;
int j={3};
A k={3};//万能的花括号初始法,终于失败了。
return 0;
}