1.如何实现一个无法继承的类?
思路:
私有继承不可见,构造函数是合成的
class A
{
public:
static A* GetObj1() //静态成员函数
{
return new A; //new 对象
}
static A GetObj2()
{
return A(); //使用匿名对象拷贝构造
}
private:
A()
{}
int _a;
};
class B :public A
{
private:
int _b;
};
int main()
{
A *p1 = A::GetObj1();
A a1 = A::GetObj2();
B b;
system("pause");
return 0;
}
2.实现一个类定义出的对象在堆上
思路:
防拷贝的条件:
1)声明成私有的 ,只声明不实现
2)将拷贝构造、构造函数、赋值运算符重载声明为私有的
class A
{
public:
static A* GetObj1()//静态成员函数
{
return new A;//new对象
}
static A GetObj2()
{
return A();//使用匿名对象拷贝构造
}
private:
A()
{}
A(const A& a);
A& operator=(const A&a);
int _a;
};
int main()
{
A *p1 = A::GetObj1();//在堆上
A a1(*p1);//栈上
A a2 = *p1; //栈上
system("pause");
return 0;
}
3.实现以个类定义出的对象在栈上
思路和上面的一样
class A
{
public:
static A& GetObj2()
{
return A();//使用匿名对象拷贝构造
}
private:
A()
{}
int _a;
};
int main()
{
A a = A::GetObj2();
system("pause");
return 0;
}