已解决! 对象的另类赋值,那么创建对象有哪些方法呢?

来源:互联网 发布:mac装win7 usb3.0驱动 编辑:程序博客网 时间:2024/05/06 07:11

看一下主函数中这个对象的赋值方法:

#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;}






原创粉丝点击