海尔集团电商网站建设,深圳搜索引擎优化收费,培训班在哪个网站找,外包加工活接单在哪里找前言#xff1a; 在C中有很多关于类的知识#xff0c;学习并且掌握它们是我们学习C的重要的一步#xff0c;怎么检测自己掌握了这些知识呢#xff1f;请看看尝试解决下面这些问题。
目录
1.请设计一个类不能被拷贝
2.请设计一个类#xff0c;只能在堆上创建对象
3.请…前言 在C中有很多关于类的知识学习并且掌握它们是我们学习C的重要的一步怎么检测自己掌握了这些知识呢请看看尝试解决下面这些问题。
目录
1.请设计一个类不能被拷贝
2.请设计一个类只能在堆上创建对象
3.请设计一个类只能在栈上创建空间
4.请设计一个类不能被继承
5.请设计一个类只能创建一个对象单例模式 1.请设计一个类不能被拷贝 拷贝只会发生在两个场景下赋值和拷贝构造因此想要一个类禁止拷贝只需要让这个类不能调用拷贝构造和赋值运算符重载即可。 在C98中会采取拷贝构造函数和operator函数私有化的方法来解决这个问题。 using namespace std;
class CopyBan
{
public:CopyBan(int a 0):_a(a){ }//...其它实现private:CopyBan(const CopyBan);CopyBan operator(const CopyBan){}int _a 0;
};
int main()
{CopyBan cp;//拷贝和赋值都会报错CopyBan cp1(cp);CopyBan cp2;cp2 cp;return 0;
} 在C11中采用关键字delete。 class CopyBan
{
public:CopyBan(int a 0):_a(a){ }//...其它实现//C11采用delete关键字CopyBan(const CopyBan) delete;CopyBan operator(const CopyBan) delete;private:int _a 0;
}; 2.请设计一个类只能在堆上创建对象 实现方式 1.将类的构造函数和拷贝构造函数私有化防止别人调用它们在其它地方偷偷开辟空间。 2.提供一个静态的成员函数该静态成员函数完成对象在堆上开辟空间的任务。
class HeapOnly
{
public:static HeapOnly* CreateObject(){return new HeapOnly;}HeapOnly(const HeapOnly) delete;HeapOnly operator(const HeapOnly) delete;
private:HeapOnly(int a 10):_a(a){ }//int _a;int _a;
}; 3.请设计一个类只能在栈上创建空间 思路禁用掉拷贝构造让构造函数私有化使用静态方法创建对象返回即可。
class StackOnly
{
public:static StackOnly CreateObject(int a 0){return StackOnly();}
private:StackOnly(int a 0):_a(a){}int _a;
}; 如果只是将operator new定义为已删除函数不能解决这个问题因为除了在堆上开辟空间以外在静态区也是可以开辟对象的。
4.请设计一个类不能被继承 C98的做法构造函数私有化。
class NonInherit
{//子类继承父类要调用父类的构造函数如果将构造函数声明为私有则子类无法调用
public:
private:NonInherit(int a 0):_a(a){ }int _a;
}; C11的做法采用关键字finial final修饰类表示这个类不能被继承
class NonInherit
{public:NonInherit(int a 0):_a(a){ }
private:int _a;
};
5.请设计一个类只能创建一个对象单例模式 单例模式