程序猿c++(9) 创建对象 要点总结

  • A+
所属分类:C++
摘要

c++写法很多,不同的写法对应着不同的含义,一些含义是显性的,一些是隐藏的,正是这些特点,使得开发人员对于c++又爱又恨,这里将重点介绍c++中创建对象的不同方法及要点

如存在一个类MyClass

class MyClass  
{  
public:  
    MyClass()   
    {   
        std::cout << "Hello MyClass!" << std::endl;   
    }  
    MyClass(int i):num(i)  
    {  
        std::cout << "Hello MyClass!------int" << std::endl;   
    }  
  
    void MyMethod()   
    {   
        std::cout << "输出成员num: " <
    }  
  
private:  
    int num;  
};  

创建对象的方法

MyClass a; //直接在栈上创建

MyClass *a= new MyClass(); //在堆上创建,栈上有指针变量指向堆内存

MyClass *a = new MyClass;//

MyClass a();//由上面几种很自然联想到这一种,这里只是声明了一个返回值为MyClass类型的无参函数,并不是创建对象的方式

加括号和不加括号的区别

//定义在栈上(系统自动回收,不用delete)

MyClass c1;//调用无参的构造函数,或者有默认参数值的构造函数。

MyClass c2();//声明一个返回值为MyClass类型的函数而已 ,不构建对象,不调用任何构造函数

MyClass c3(1);//调用参数为int的构造函数

//定义在堆上 (系统不会自动回收,需要delete)

(1)自定义类型。对于自定义类型来说没有区别,new时候是否加括号,都是使用默认构造函数

MyClass *c4 = new MyClass();//num=随机数

MyClass *c5 = new MyClass(1); //num=1

MyClass *c6 = new MyClass;//num=随机数

(2)内置类型。对于内置类型来说加括号会初始化为系统默认值

int *pint2 = new int();  //值为0

int *pint1 = new int(1);  //值为1

int *pint3 = new int;//值为随机数

什么时候使用初始化列表

所有成员变量的初始化都必须使用初始化列表

父类的初始化(调用父类构造函数)必须使用初始化列表

Qt大课堂-QtShare

发表评论

您必须登录才能发表评论!