C++为什么要阻止实例化

电子说

1.3w人已加入

描述

为什么要阻止实例化    一个类不想被实例化通常有两种情况:一种是抽象类,一种是工具类。  抽象类  比如现在需要计算图形的面积,可以是正方形、长方形、圆形等等。  于是抽象出了基类,叫图形。  
class Sharp{};
class Circle : public Sharp{};
class Rectangle : public Sharp{};
   Sharp作为抽象基类,也不好计算其面积,所以没有实例化的必要。  工具类  比如我们在QT中经常遇到的代码:  
  •  
QFileDialog::getOpenFileName(this"选择一个文件", QCoreApplication::applicationFilePath(), "*.cpp");
   很多情况下我们只是需要通过函数 getOpenFileName 来获得当前文件的路径,没必要去创建对象。当然这里只是举个例子,并不是说 QFileDialog 是工具类。  还有这样一种情况,我们需要一个类来封装加、减、乘、除。  
class Calculate{public:    static int add(int x, int y);    static int sub(int x, int y);    static int mul(int x, int y);    static int div(int x, int y);};
 

 

上面这个类就是一个典型的工具类,用它创建对象没有意义,可以直接通过类名调用静态成员函数。  如何阻止    方法一:类中包含纯虚函数。  还是上面的Sharp类。  
class Sharp{public:    virtual void get_s() = 0;    //纯虚函数};
 

 

纯虚函数没有函数体。  含有纯虚函数的类叫抽象类。  抽象类不好创建对象,因为就算是创建了对象,调用纯虚函数的时候,也不知道如何执行。  方法二:构造函数私有  还是上面的计算类。  
class Calculate{private:    Calculate();public:    static int add(int x, int y);    static int sub(int x, int y);    static int mul(int x, int y);    static int div(int x, int y);};
 

 

把构造函数设置成私有,就不能在类的外部创建对象,相当于间接的阻止了该类实例化对象。  

审核编辑 :李倩

 


打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分