c++0x11新特性:delete删除函数

c_plus_plus_0x11.cpp:

// c_plus_plus_0x11.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <Windows.h>
#include <iostream>
using namespace std;

class A
{
public:
    int add(int a, int b){ return a + b; }
    int sub(int a, int b){ return a - b; }
};

class B :public A
{
public:
    //int sub(int a, int b) = delete;
};

int _tmain(int argc, _TCHAR* argv[])
{
    A a;
    cout << "5+2=" << a.add(5, 2) << endl;
    cout << "5-2=" << a.sub(5, 2) << endl<<endl;

    B b;
    cout << "9+3=" << b.add(9, 3) << endl;
    cout << "9-3=" << b.sub(9, 3) << endl << endl;

    cout << "done" << endl;
    getchar();
    return 0;
}

运行效果:

把此行代码注析删除:

//int sub(int a, int b) = delete;

重新编译,结果为:

可见,delete可以用来删除一个类从基类继承的函数,听说可以用来删除拷贝构造函数,下面再尝试一下。

c_plus_plus_0x11.cpp:

// c_plus_plus_0x11.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <Windows.h>
#include <iostream>
using namespace std;

class A
{
public:
    A(int a, int b){ a_ = a; b_ = b; }
    int add(){ return a_ + b_; }
    int sub(){ return a_ - b_; }

    //A(const A&) = delete;        // no copy

    int a_{};
    int b_{};
};

int _tmain(int argc, _TCHAR* argv[])
{
    A a(5,2);
    cout << "5+2=" << a.add() << endl;
    cout << "5-2=" << a.sub() << endl<<endl;

    A b=a;
    cout << b.a_ << "+" << b.b_ << "=" << b.add() << endl;
    cout << b.a_ << "-" << b.b_ << "=" << b.sub() << endl;

    cout << "done" << endl;
    getchar();
    return 0;
}

运行效果:

把此行代码注析删除:

    //A(const A&) = delete;        // no copy

重新编译:

估计delete可以用来删除一个类从基类继承(如A.sub函数)的和此类隐式存在(如拷贝构造函数)的函数。

资料来源:

C++11 FAQ  http://www.stroustrup.com/C++11FAQ.html#default

完。

时间: 2024-10-13 16:18:05

c++0x11新特性:delete删除函数的相关文章

C++11新特性:Lambda函数(匿名函数)

声明:本文参考了Alex Allain的文章http://www.cprogramming.com/c++11/c++11-lambda-closures.html 加入了自己的理解,不是简单的翻译 C++11终于知道要在语言中加入匿名函数了.匿名函数在很多时候可以为编码提供便利,这在下文会提到.很多语言中的匿名函数,如C++,都是用Lambda表达式实现的.Lambda表达式又称为lambda函数.我在下文中称之为Lambda函数. 为了明白Lambda函数的用处,请务必先搞明白C++中的自动

ES6新特性:Function函数扩展, 扩展到看不懂

本文所有Demo的运行环境为nodeJS, 参考:让nodeJS支持ES6的词法----babel的安装和使用 : 函数的默认值: 如果有参数 ,那就用参数, 如果没有参数, 那就用默认的参数: ajax的请求经常要做这些判断, ES6规定了新的表达式, 让判断参数的逻辑更加简单: function fn(a = 1, b = 2, c = 3) { console.log(a,b,c); } fn(); //输出 1, 2, 3; fn(4,5,6); //输出 4, 5, 6 如果调用函数的

Oracle11.2新特性之listagg函数 (行列转换)

Oracle11.2新增了LISTAGG函数,可以用于字符串聚集,测试如下: 1,版本SQL> select * from v$version; BANNER--------------------------------------------------------------------------------Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - ProductionPL/SQL Release 11.2.0

C++11 标准新特性:Defaulted 和 Deleted 函数

前两天写的铁字中提到了C++的删除函数,今天特地去网上查了查,转载了一篇不错的文章... 转载自 http://www.ibm.com/developerworks/cn/aix/library/1212_lufang_c11new/index.html C++11 标准新特性:Defaulted 和 Deleted 函数 本文将介绍 C++11 标准的两个新特性:defaulted 和 deleted 函数.对于 defaulted 函数,编译器会为其自动生成默认的函数定义体,从而获得更高的代

【转】C++11 标准新特性:Defaulted 和 Deleted 函数

原文链接http://www.ibm.com/developerworks/cn/aix/library/1212_lufang_c11new/ 本文将介绍 C++11 标准的两个新特性:defaulted 和 deleted 函数.对于 defaulted 函数,编译器会为其自动生成默认的函数定义体,从而获得更高的代码执行效率,也可免除程序员手动定义该函数的工作量.对于 deleted 函数, 编译器会对其禁用,从而避免某些非法的函数调用或者类型转换,从而提高代码的安全性.本文将通过代码示例详

关于 C++ 删除函数的一点问题

之前的项目在C++代码中有用到了 删除函数 ... 1 namespace Framework 2 { 3 class Utils final 4 { 5 private: 6 Utils() = delete; //删除函数 7 public: 8 9 //-------- 10 // Math 11 //-------- 12 13 // 返回无限制随机数,最大0x7fffffff 14 inline static int random(); 15 16 // 返回指定范围随机数(范围[st

前端入门21-JavaScript的ES6新特性

声明 本篇内容全部摘自阮一峰的:ECMAScript 6 入门 阮一峰的这本书,我个人觉得写得挺好的,不管是描述方面,还是例子,都讲得挺通俗易懂,每个新特性基本都还会跟 ES5 旧标准做比较,说明为什么会有这个新特性,这更于理解. 所以,后续不会再写个关于 ES6 系列的文章了,就在这篇里大概的列举一下,大体清楚都有哪些新特性就好了,以后需要用时再去翻一翻阮一峰的书. 正文-ES6新特性 ES6 新标准规范相比于 ES5 旧标准规范中,无非就三个方面的改动:新增.更新.废弃. 由于更新和废弃需要

MERGE新特性(UPDATE WHERE,DELETE WHERE,INSERT WHERE)

MERGE语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句.通过MERGE语句,根据一张表或子查询的连接条件对另外一张表进行查询,连接条件匹配上的进行UPDATE,无法匹配的执行INSERT.这个语法仅需要一次全表扫描就完成了全部工作,执行效率要高于INSERT+UPDATE. 语法为*************************************************************MERGE [INTO [schema .] table [t_al

ES6新特性(函数默认参数,箭头函数)

ES6新特性之 函数参数的默认值写法 和 箭头函数. 1.函数参数的默认值 ES5中不能直接为函数的参数指定默认值,只能通过以下的变通方式:   从上面的代码可以看出存在一个问题,当传入的参数为0或者false时,会直接取到后面的值,而不是传入的这个参数值. 那怎么解决呢?对于上图的代码,可以通过判断是否传入了num参数,没有就用默认值:   这种做法还是很麻烦的,而ES6则直接在参数定义里面设置函数参数的默认值,而且不用担心传入参数是0或者false会出错了: 2.箭头函数 箭头函数用 =>