每日一刷——一个类不能被继承 &类只能在堆上创建对象&类只能在栈上创建对象。
2017-07-15 21:24
405 查看
1.设计一个类不能被继承
将父类的构造和析构函数设为私有。
在C++中,子类的构造和析构函数会自动调用父类的构造和析构函数,所以将父类构造和析构设为私有后,子类继承时会由于试图调用父类构造函数而编译出错。
这时可以设计两个接口供外部创建对象
2.设计一个类只能在堆上创建对象
在堆上创建对象需要用到动态开辟空间,需要使用new
new一个新对象分为两步:
调用operator new()在堆上查找合适大小的空间分配给新对象;
调用构造函数构造对象,对新开辟的空间进行初始化
class A
{
protected:
A(){}
~A(){}
public:
static A*create()
{
return new A();
}
void destory()
{
delete this ;
}
};
3.设计一个类只能在栈上创建对象
只有使用new运算符,对象才会建立在堆上,因此,只要禁用new运算符就可以实现类对象只能建立在栈上。将operator new()设为私有即可。
将父类的构造和析构函数设为私有。
在C++中,子类的构造和析构函数会自动调用父类的构造和析构函数,所以将父类构造和析构设为私有后,子类继承时会由于试图调用父类构造函数而编译出错。
这时可以设计两个接口供外部创建对象
class AA { public: static AA *GetInstance() { return new AA(); } static void DeleteInstance(AA*pInstance) { delete pInstance; } private: AA() {}; ~AA() {}; }; //利用虚拟继承: class AA { friend T; private: AA (); ~AA (); }; class BB:virtual public AA { public: BB(); ~BB(); };
2.设计一个类只能在堆上创建对象
在堆上创建对象需要用到动态开辟空间,需要使用new
new一个新对象分为两步:
调用operator new()在堆上查找合适大小的空间分配给新对象;
调用构造函数构造对象,对新开辟的空间进行初始化
class A
{
protected:
A(){}
~A(){}
public:
static A*create()
{
return new A();
}
void destory()
{
delete this ;
}
};
3.设计一个类只能在栈上创建对象
只有使用new运算符,对象才会建立在堆上,因此,只要禁用new运算符就可以实现类对象只能建立在栈上。将operator new()设为私有即可。
class A { public: A(){} ~A(){} private: void* operator new(size_t t); void operator delete(void* ptr); };
相关文章推荐
- 类--设计一个类不能被继承&&设计一个类只能在堆上创建对象&&设计一个类只能在栈上创建对象。
- -设计一个类不能被继承 2.设计一个类只能在堆上创建对象。 3.设计一个类只能在栈上创建对象。
- C++:1.设计一个类不能被继承 2.设计一个类只能在堆上创建对象。 3.设计一个类只能在栈上创建对象。
- 设计一个类不能被继承 2.设计一个类只能在堆上创建对象。 3.设计一个类只能在栈上创建对象
- 设计一个类不能被继承;只能在堆上创建对象;只能在栈上创建对象
- 1.设计一个类不能被继承 2.设计一个类只能在堆上创建对象。 3.设计一个类只能在栈上创建对象
- 1.设计一个类不能被继承 2.设计一个类只能在堆上创建对象。 3.设计一个类只能在栈上创建对象
- 创建一个不能被继承的类和只能在堆上(或栈上)创建对象
- 设计类不能被继承 、只能在堆上创建对象、只能在栈上创建对象。
- 定义一个只能在堆上生成对象的类&&定义一个只能在栈上生成对象的类&&定义一个类不能被继承
- C++创建一个类(1.只能在堆上创建; 2 只能在栈上创建; 3 不能被继承(堆上和栈上都可以创建))
- C++创建一个类(1.只能在堆上创建; 2 只能在栈上创建; 3 不能被继承(堆上和栈上都可以创建))
- 根据类(不能被继承、只能在栈上/堆上创建对象)的特点设计一个类
- day03之判断链表带环以及求环的长度及环的入口点+一个类不能被继承及只能分别在栈堆上创建对象
- 链表带环问题/设计一个类不能被继承/设计一个类只能在堆(栈)上创建对象
- 如何创建一个只能在堆上创建对象的类
- 【中科大洋笔试题】定义一个不能被继承的类,并且只能实例化3个对象。
- 由创建一个不能被继承的类引发的对象模型的思考
- 17_7_15:判断链表是否有环+求环的长度+求环的入口。设计不能被继承的类,只能堆/栈上创建对象的类
- 多态&指针访问虚函数&不能被继承的类&快速排序&N皇后问题&插入排序&堆排序&merge归并排序&栈上生成对象&两个栈实现一个队列