对象的几种初始化方式
A a; —> 代表调用默认构造函数初始化
A a(实参); —>代表调用显示构造函数初始化
A a(A()/A(实参)/A的一个对象) —>括号内的第一种和第二种代表先调用构造函数创建临时的对象然后再调拷贝构造函数初始化,第三种方式代表调用拷贝构造函数初始化
A a = A的一个对象 —> 调用拷贝构造初始化
A a = A::Fun —> A Fun(){} ,代表先调用fun函数 再调用拷贝构造函数返回一个A的临时变量,用这个临时变量来调拷贝构造函数来初始化a
A a =A()/A(实参) —> 代表,通过调用默认的构造函数或显示的构造函数来初始化
综上可看 无论 A a=A() /还是A a ,这俩种方式都可以初始化对象。
只在堆上
class GetHeap
{
public:
static GetHeap* GetforHeap()
{
GetHeap * temp = new GetHeap();
return temp;
}
~GetHeap()
{}
protected:
GetHeap()
{}
GetHeap(const GetHeap&);
};
只在栈上
class Getstack
{
public:
static Getstack Getforstack()
{
return Getstack();
}
Getstack&operator=(const Getstack&_b)
{
cout << "赋值运算符重载" << endl;
}
private:
Getstack()
{
cout << "默认构造" << endl;
}
Getstack(const Getstack&_b)
{
cout << "拷贝构造" << endl;
}
};
无法继承的对象
class c
{
static c* GetforHeap()
{
GetHeap * temp = new c();
return temp;
}
static Getstack Getforstack()
{
return c();
}
private:
c(){}
~c(){}
};