C++实用技术之禁止派生、拷贝和只允许派生和拷贝(C++11实现)

来源:互联网 发布:苹果软件版本 编辑:程序博客网 时间:2024/06/05 04:08

现行的C++标准是C++11,非官方叫法为C++0x,但大多数人仍然使用C++98,而且C++11完全兼容C++98,C++11添加了许多令人振奋的新特性,毋需详述,可以看相关的资料了解,前一段时间写了一篇博文如题,现在在C++11下重新实现,详解如下。

[禁止派生]

在C++11下禁止派生相当容易,如果在C++11之前需要做很多工作的,现在在C++11下很简单只需要一个新的关键字final,是的只需要final一个关键字,其实了解过java、C#的人都很熟悉这个关键字的,具体看下面代码:

class base final{public:  void sayhello(){    std::cout << "hello!" << std::endl;  }};


你只需要在定义class时加上final修饰符就搞定了,当有人继承了base类是编译器就会发出错误信息的

[禁止拷贝]

c++11之前要禁止拷贝往往需要将copy构造函数,和赋值操作重载函数声明为private的,但是,这样还不够强化,它不能很醒目的提醒你该对象禁止拷贝,往往你会得到编译器的提示为copy构造函数是private的调用违法之类的提示,会让人摸不着头脑,在C++11中你只需要向下面这样做:

class rem{  rem(const rem &) = delete;  rem &operator = (const rem &) = delete;};

C++11delete关键字有了一个新的语意,你可以像上面那样声明拷贝构造函数一旦你试图拷贝就会得到编译器明确的警告

[只允许拷贝、只允许派生]

C++11下这两个实现差别不大可以看我的另一篇同名的博文http://blog.csdn.net/zjwdmlmx/article/details/7734234


原创粉丝点击