深入理解C++11【2】

深入理解C++11【2】

1、继承构造函数。

  当基类拥有多个构造函数的时候,子类不得不一一实现。

  C++98 可以使用 using 来使用基类的成员函数。

#include < iostream> using namespace std;
struct Base {
    void f( double i){
        cout << "Base:" << i << endl;
    }
};
struct Derived : Base {
    using Base:: f;
    void f( int i) {
        cout << "Derived:" << i << endl;
    }
}; 

int main() {
    Base b;
    b. f( 4. 5); // Base: 4. 5 

    Derived d;
    d. f( 4. 5); // Base: 4. 5
} // 编译 选项: g++ 3- 1- 3. cpp

  C++11中,这个功能由成员函数扩展到了构造函数上。

struct A {
    A( int i) {}
    A( double d, int i) {}
    A( float f, int i, const char* c) {} // ...
}; 

struct B : A {
    using A:: A; // 继承 构造 函数
    // ...
    virtual void ExtraInterface(){}
};

  这 意味着 如果 一个 继承 构造 函数 不被 相关 代码 使用, 编译器 不 会为 其 产生 真正 的 函数 代码。

  对于 继承 构造 函数 来讲, 参数 的 默认值不会被继承 的。 事实上, 默认值 会 导致 基 类 产生 多个 构造 函数 的 版本, 这些 函数 版本 都会 被 派生 类 继承。

  如果 一旦 使用 了 继承 构造 函数, 编译器 就不 会 再为 派生 类 生成 默认 构造 函数 了,

struct A { A (int){} };
struct B : A{ using A:: A; };
B b; // B 没有 默认 构造 函数

  截至2013年,还没有编译器实现了继承构造函数。

2、委派构造函数。

3、

4、

5、

6、

7、

原文地址:https://www.cnblogs.com/tekkaman/p/10211551.html

时间: 2024-10-19 19:11:21

深入理解C++11【2】的相关文章

C++ 11新特性解析——《深入理解C++ 11:C++11新特性解析和应用》读书笔记

因为偶然的机会,在图书馆看到<深入理解C++ 11:C++11新特性解析和应用>这本书,大致扫下,受益匪浅,就果断借出来,对于其中的部分内容进行详读并亲自编程测试相关代码,也就有了整理写出这篇读书笔记的基础.C++作为踏入编程的最初语言,一直充满感情,而C++11作为新标准虽然推出一段时间了,却因为总总原因直到现在才去开始真正了解,不过一句话回荡在脑中:当你认为为时已晚的时候,恰恰是最早的时候!从C++98到C++11, C++11标准经历了10几年的沉淀,以全新的姿态迎接新的挑战,长话短说,

C++11变长模板解析(深入理解C++11)

参考自:深入理解C++11 变长模版: 变长函数和变长的模版参数 变长函数: double sum(int n, ...)//求n个double数据之和 { double sum = 0; va_list args;//接受输入数据的数据结构,需声明stdarg.h, va_start(args, n); //初始化数据 while (n>0) { sum += va_arg(args, double); //将args中的数据一一取出,每隔sizeof(double)取一次数,再求和 --n;

深入理解C++11【4】

[深入理解C++11[4]] 1.基于范围的 for 循环 C++98 中需要告诉编译器循环体界面范围.如for,或stl 中的for_each: int main() { int arr[ 5] = { 1, 2, 3, 4, 5}; int * p; for (p = arr; p < arr + sizeof( arr)/ sizeof( arr[ 0]); ++ p){ *p *= 2; } for (p = arr; p < arr + sizeof( arr)/ sizeof( a

《深入理解C++11》要点总结

3.1 继承构造函数 通过using关键字可以继承父类的构造函数.也可以通过显式定义构造函数来阻止继承. 3.2 委派构造函数,减少构造函数的书写 class Info { public: Info() { InitReset(); } Info(int i) : Info() { type = i; } //通过调用无参构造函数,可以减少构造函数内容的重写 Info(char e) : Info() { name = e; } //委派构造函数和初始化列表不能同时存在,使用委派构造函数后,初始

Netruon 理解(11):使用 NAT 将 Linux network namespace 连接外网

学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GRE/VxLAN 虚拟网络 (4)Neutron OVS OpenFlow 流表 和 L2 Population (5)Neutron DHCP Agent (6)Neutron L3 Agent (7)Neutron LBaas (8)Neutron Security Group (9)Neutro

[转][c++11]我理解的右值引用、移动语义和完美转发

c++中引入了右值引用和移动语义,可以避免无谓的复制,提高程序性能.有点难理解,于是花时间整理一下自己的理解. 左值.右值 C++中所有的值都必然属于左值.右值二者之一.左值是指表达式结束后依然存在的持久化对象,右值是指表达式结束时就不再存在的临时对象.所有的具名变量或者对象都是左值,而右值不具名.很难得到左值和右值的真正定义,但是有一个可以区分左值和右值的便捷方法:看能不能对表达式取地址,如果能,则为左值,否则为右值. 看见书上又将右值分为将亡值和纯右值.纯右值就是c++98标准中右值的概念,

802.11协议精读12:初探协议性能

序言 在初始的802.11协议版本之后,陆续更新的802.11e,以及802.11n以及更新的802.11技术,其都是基于改善当前802.11协议的缺陷不断进行改进的.为了理解这些改进,我们首先要理解802.11存在的一些问题,其中一个主要的问题就是性能问题. 本文我们先简单介绍802.11中一个常见问题,即路由器的宣称速率不等于实际速率的问题,然后我们具体分析一下这个宣称速率(即物理层速率)的计算方法.在后面一篇文章中,我们会介绍用数学方法对该吞吐量具体进行估计的方法,即Bianchi模型.

Internet Explorer 11 Enterprise Mode 详解

白驹过隙,已经三月未能及时更新博文,今天为大家分享有关IE 11 Enterprise Mode(企业模式)两个章节内容,之前看到好多群里讨论有关IE11企业模式的问题,这里简单做一下汇总,第一章为IE11企业模式详解,第二章为企业模式排错,希望对大家理解IE 11 Enterprise Mode的含义及企业批量开启及排错有帮助,谢谢. 一.IE 11企业模式简介: 企业模式是可以在 Windows 8.1 更新和 Windows 7 设备的 Internet Explorer 11 上运行的一

【浅墨Unity3D Shader编程】之十 深入理解Unity5中的Standard Shader(二)&amp;屏幕油画特效的实现

本系列文章由@浅墨_毛星云 出品,转载请注明出处.   文章链接:http://blog.csdn.net/poem_qianmo/article/details/49719247 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 本文工程使用的Unity3D版本: 5.2.1 概要:本文讲解了Unity中着色器编译多样化的思路,并对Standard Shader中正向基础渲染通道的源码进行了分析,以及对屏幕油画特效进行了实现. 众所周知,Unity官