IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 初学者的C++11学习:委托构造函数,继承构造函数 -> 正文阅读

[C++知识库]初学者的C++11学习:委托构造函数,继承构造函数

内容学习自:爱编程的大丙

一、委托构造函数

委托构造函数允许使用同一个类中的一个构造函数地啊哟用其他的构造函数,从而简化相关变量初始化。下面举例说明

class test13
{
public:
	test13() {};
	test13(int max)
	{
		this->m_max = max > 0 ? max : 100;
	}

	test13(int max, int min) :test13(max)
	{
		this->m_min = min > 0 && min < max ? min : 1;
	}

	test13(int max, int min, int mid) :test13(max, min)
	{
		this->m_middle = mid < max&& mid > min ? mid : 50;
	}

	int m_min;
	int m_max;
	int m_middle;
};
void main()
{
  test13 t(90, 30, 60);
  cout << "min: " << t.m_min << ", middle: "
  << t.m_middle << ", max: " << t.m_max << endl;

}

?这里是一个链式调用,就是第三个调用第二个,第二个调用了第一个

  • 这种链式的构造函数调用不能形成一个闭环(死循环),否则会在运行期抛异常。
  • 如果要进行多层构造函数的链式调用,建议将构造函数的调用的写在初始列表中而不是函数体内部,否则编译器会提示形参的重复定义
  • 并且在这个链中不能重复给同样的变量初始化

二、继承委托构造

之前98版本要自己重写构造,11以后可以使用基类的。之前需要在子类中重新定义和基类一致的构造函数,看看以前是怎么写的

class Base
{
public:
    Base(int i) :m_i(i) {}
    Base(int i, double j) :m_i(i), m_j(j) {}
    Base(int i, double j, string k) :m_i(i), m_j(j), m_k(k) {}

    int m_i;
    double m_j;
    string m_k;
};

class Child : public Base
{
public:
    Child(int i) :Base(i) {}
    Child(int i, double j) :Base(i, j) {}
    Child(int i, double j, string k) :Base(i, j, k) {}
};

现在可以使用using 类名::构造函数名,以此声明使用基类构造函数

看看简化的

class Base
{
public:
    Base(int i) :m_i(i) {}
    Base(int i, double j) :m_i(i), m_j(j) {}
    Base(int i, double j, string k) :m_i(i), m_j(j), m_k(k) {}

    int m_i;
    double m_j;
    string m_k;

    void print(){cout<<"nihaoya"<<endl}
};

class Child : public Base
{
public:
    using Base::Base;
    using Base::print;
    void print(){cout<<"sawadika"<<endl;}
};

另外,也可以使用using 基类::函数名;实现使用基类被覆盖的函数。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-01-29 22:54:07  更:2022-01-29 22:55:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:45:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码