构造函数限定符的使用

关于C++ 中构造函数限定符的使用是一个比较让人头疼的问题,但是清楚了类的作用就比较好办了。通常设计一个类时,会涉及到“向用户开放哪些属性,操作,作为抽象类,基类,单例,多例”等等问题。

public限定符就不再赘述,属于最简单,最open的限定符。


下面就通过private,protected对构造函数的限定来看看其起到的作用。

private,protected对构造函数的限定,就可以防止外部直接new一个该类对象.

从语法上来讲,一个函数被声明为protected或者private,那么这个函数就不能从“外部”直接被调用了。对于protected的函数,子类的“内部”的其他函数可以调用之,

而对于private的函数,只能被本类“内部”的其他函数说调用。

private作为最严格的限定符,如果限定了构造函数,那么该类就不能在外部被创建,也不能被继承,相当于密封了,只能通过该类内部的静态方法(getInstance()方法)

来获取该对象,通常用private限定构造函数,那么该类通常被设计成单例模式。

如果不像完全封闭该类,则可以考虑用protected来限定其构造函数,那么这个类一般作为基类或者父类被继承使用的,因为其在外部不能被创建,只能在其子类当中被创建,

类似天生做父类的材料。

实例代码如下:

Class A
{
     protected:     // protected类型构造函数
      A(){cout<<"construct!!!\n";}
     public:
          void show()
          {
                .....
          }
}

Class B :public A
{
     public:
          B()
          {
               A();// 调用父类的构造函数,因为父类构造函数的方位修饰符为protected
          }

          void function()
          {
               A* pa = new A;// 父类的protected构造函数,在子类当中可以被调用
               pa->show();  
          }

}

void main(void)
{
     B* pb = new B;//  OK 
     A* pa = new A;//    类A的构造函数为protected类型,在外部不能被构造,只能在子类当前被调用,故此处错误
     A a; //  error
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值