C++委托构造函数和继承构造函数

这篇具有很好参考价值的文章主要介绍了C++委托构造函数和继承构造函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

委托构造函数

        C++11允许在一个构造函数的定义中使用另一个构造函数来简化编码工作。这被称为委托,因为构造函数暂时将创建对象的工作委托给另一个构造函数。

class employee {
    int m_id;
    string m_name;
public
    employee(int id = 0, const string &name = " ") : m_id(id), m_name(name) { }
    /*使用其他的构造函数来完成数据成员的初始化。下面的这个构造函数是一个委托构造函数。*/
    employee(const string &name) : employee(0, name) { }
};

继承构造函数

        为了进一步简化编码工作,C++11提供了一种让派生类能够继承基类构造函数的机制。在C++98中提供了一种语法:使用using声明让基类的非特殊成员对派生类可用。

//使用using声明需要注意派生类只能为它可以访问的名字提供using声明
class Base {
public:
    int fn(int j) {...}
    double fn(double w) {...}
    void foo(int) {...}
};

class Derv : public Base {
public:
    /*using声明语句只需要提供一个名字,不需要形参列表。*/
    using Base::fn;
    double fn(double) {...}
    int foo(double) {...}
};

Derv d;
/*和其他作用域命名冲突一样,如果派生类成员和基类的成员名字相同(如果成员函数,只要名字相同就会
隐藏不用看返回值和形参),那么定义在派生类的名字将会屏蔽掉基类的名字(基类的成员被隐藏),如果在
派生类里面需要访问基类的同名成员有二种办法,一种是使用基类的作用域运算符,另一种是在派生类中
使用using声明。*/
int k = d.fn(3);    //uses Base::fn(int)
double z = d.fn(2.4);    //uses Derv::fn(double)
d.Base::foo(10);    //调用Base::foo

        在C++11中,将这种方法应用于构造函数。这让派生类继承的所有构造函数(默认构造函数、复制构造函数和移动构造函数除外)

class BS {
    int q;
    double w;
public:
    BS() : q(0), w(0) {}
    BS(double x) : q(-1), w(x) {}
    BS(int k, double x) : q(k), w(x) {}
}

class DR : public BS {
    short j;
public:
    using BS::BS;
    DR() : j(-100) {}
    DR(double x) : BS(2*x), j(int(x)) {}
}

int main()
{
    DR o1;    //use DR()
    DR o2(19.22);    //use DR(double)
    /*由于没有构造函数DR(int,double),因此创建DR对象o3时,将使用继承来的BS(int, double)*/
    DR o3(10, 1.2);    //use BS(int double)
}

        这里需要注意,继承的基类构造函数只初始化基类成员;如果还要初始化派生类成员,则应使用成员列表初始化语法;文章来源地址https://www.toymoban.com/news/detail-539510.html

DR(int i, int k, double x) : j(i), BS(x, x) {}

到了这里,关于C++委托构造函数和继承构造函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • js继承的几种方式(原型链继承、构造函数继承、组合式继承、寄生组合式继承、ES6的Class类继承)

    实现原理: 子类的原型指向父类实例 。子类在自身实例上找不到属性和方法时去它父类实例(父类实例和实例的原型对象)上查找,从而实现对父类属性和方法的继承 缺点: 子类创建时不能传参(即没有实现super()的功能); 父类实例的修改会影响子类所有实例 实现原理:

    2024年02月07日
    浏览(45)
  • Solidity 小白教程:11. 构造函数和修饰器

    这一讲,我们将用合约权限控制( Ownable )的例子介绍 solidity 语言中构造函数( constructor )和独有的修饰器( modifier )。 构造函数( constructor )是一种特殊的函数,每个合约可以定义一个,并在部署合约的时候自动运行一次。它可以用来初始化合约的一些参数,例如初始

    2024年04月17日
    浏览(33)
  • 【C++】C++入门—初识构造函数 , 析构函数,拷贝构造函数,赋值运算符重载

    如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗? 并不是 任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。 默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数 我们实现了,编译器就不会生成了 构造函数是

    2024年02月21日
    浏览(48)
  • 【C++】构造函数分类 ① ( 构造函数分类简介 | 无参构造函数 | 有参构造函数 | 拷贝构造函数 | 代码示例 - 三种类型构造函数定义与调用 )

    C++ 构造函数可以分为以下几类 : 无参构造函数 : 最简单也是默认的构造函数 , 函数没有参数 , 如果创建一个对象 , 没有传入参数 , 调用的就是该类型的 构造函数 ; 有参构造函数 : 带参数的 构造函数 , 创建 实例对象 时 , 为成员变量提供初始值 ; 拷贝构造函数 : 拷贝现有 实例

    2024年02月07日
    浏览(40)
  • C++ 类和对象(二)构造函数、析构函数、拷贝构造函数

            本文将介绍类的6个默认成员函数中的构造函数、析构函数和拷贝构造函数,赋值重载和取地址重载涉及运算符重载的知识,将在下篇讲解。所谓默认成员函数,也就是每个类都有的成员函数,我们可以显式定义这些函数,否则,编译器会自动生成它们。 目录 前言

    2024年02月09日
    浏览(44)
  • 【C++初阶】类和对象——构造函数&&析构函数&&拷贝构造函数

    ========================================================================= 个人主页点击直达: 小白不是程序媛 C++系列专栏: C++头疼记 ========================================================================= 目录 前言 类的6个默认成员函数 构造函数 概念 构造函数的特性 析构函数 概念 析构函数特性 拷贝构

    2024年02月06日
    浏览(56)
  • [C++]构造与毁灭:深入探讨C++中四种构造函数与析构函数

     个人主页:北·海  🎐CSDN新晋作者  🎉欢迎 👍点赞✍评论⭐收藏 ✨收录专栏:C/C++ 🤝希望作者的文章能对你有所帮助,有不足的地方请在评论区留言指正,大家一起学习交流!🤗 目录 构造函数有什么作用? 构造函数有什么特点 构造函数的种类 一.默认构造函数 1.什么是

    2024年02月09日
    浏览(42)
  • 【C++】类与对象(构造函数、析构函数、拷贝构造函数、常引用)

       🌈个人主页: 秦jh__https://blog.csdn.net/qinjh_?spm=1010.2135.3001.5343 🔥 系列专栏:   目录 类的6个默认成员函数 构造函数 特性  析构函数 特性  析构的顺序 拷贝构造函数 特性 常引用      💬 hello! 各位铁子们大家好哇。              今日更新了类与对象的构造函数、

    2024年02月21日
    浏览(42)
  • 【C++】初始化列表构造函数VS普通构造函数

    初始化列表构造函数最优先匹配问题 对于一个类而言,只要其中包含有初始化列表的构造函数,编译器在编译使用{}语法的构造时会最倾向于调用初始化列表构造函数,哪怕做类型转换也在所不惜,哪怕有类型最佳匹配的普通构造函数或移动构造函数也会被劫持 编译器这种热

    2024年02月05日
    浏览(67)
  • ⚡【C++要笑着学】(7) 默认成员函数:构造函数 | 析构函数 | 拷贝构造函数

    🔥 订阅量破千的火热 C++ 教程 👉 火速订阅 《C++要笑着学》   🔥 CSDN 累计订阅量破千的火爆 C/C++ 教程的 2023 重制版,C 语言入门到实践的精品级趣味教程。 了解更多: 👉  \\\"不太正经\\\" 的专栏介绍  ← 试读第一章 订阅链接: 🔗 《C语言趣味教程》 ← 猛戳订阅!   本篇

    2024年02月07日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包