首页 > 编程语言 >C++学习随笔——委托构造函数

C++学习随笔——委托构造函数

时间:2024-08-30 09:15:54浏览次数:8  
标签:初始化 委托 int value C++ MyClass 随笔 构造函数

C++11 中,引入了委托构造函数(delegating constructors)的概念。

委托构造函数允许一个构造函数调用同一个类中的另一个构造函数,以减少代码重复。

 

委托构造函数的语法:

class MyClass {
public:
    MyClass(int x) : value(x) {
        // 这个构造函数初始化 value
    }

    MyClass() : MyClass(0) {
        // 委托给 MyClass(int) 构造函数,将 value 初始化为 0
    }

private:
    int value;
};
  • MyClass(int x) 是一个带参数的构造函数,它负责初始化 value
  • MyClass() 是无参数的构造函数,它在初始化列表中调用了 MyClass(int x),并传递了一个默认值 0。这种调用方式就是委托构造函数。

 

以下是一个更详细的例子:

#include <iostream>
#include <string>

class Person {
public:
    // 基本构造函数
    Person(const std::string& name, int age) : name(name), age(age) {
        std::cout << "Person(const std::string&, int) called" << std::endl;
    }

    // 委托构造函数,默认年龄为 0
    Person(const std::string& name) : Person(name, 0) {
        std::cout << "Person(const std::string&) called" << std::endl;
    }

    // 委托构造函数,默认姓名为空字符串和年龄为 0
    Person() : Person("", 0) {
        std::cout << "Person() called" << std::endl;
    }

    void printInfo() const {
        std::cout << "Name: " << name << ", Age: " << age << std::endl;
    }

private:
    std::string name;
    int age;
};

int main() {
    Person p1("Alice", 30); // 调用 Person(const std::string&, int)
    Person p2("Bob");        // 调用 Person(const std::string&)
    Person p3;               // 调用 Person()

    p1.printInfo();
    p2.printInfo();
    p3.printInfo();

    return 0;
}

 

标签:初始化,委托,int,value,C++,MyClass,随笔,构造函数
From: https://www.cnblogs.com/kitanoki/p/18387940

相关文章

  • 【C++】vector(下)--上篇
    个人主页~vector(上)~vector二、vector的模拟实现1、了解组成2、vector.h(1)为什么有了size_t参数的vector构造函数还要再写一个int参数的重载vector构造函数(2)为什么reserve不用memcpy(3)reserve和resize的相关解释(4)迭代器失效问题详解二、vector的模拟实现1、了解组......
  • 【C/C++进阶】——文件操作之文本文件与二进制文件指针读写
    【文件】——操作文件目录一:文件的定义二:文件名三:文件类型3.1:二进制文件3.2:文本文件四:文件的打开与关闭4.1:文件指针4.2:文件的打开与关闭五:文件的顺序读写5.1:读写字符5.2:读写字符串5.3:读写格式化数据六:文件的随机读写6.1:fseek6.2:ftell6.3:rewind七:文件读取结......
  • VTK随笔十:VTK图形处理(封闭性检测、联通区域分析、多分辨率处理)
    一、封闭性检测        如果一条边只被一个多边形包含,那么这条边就是边界边。是否存在边界边是检测一个网格模型是否封闭的重要特征。        vtkFeatureEdges是一个非常重要的类,该类能够提取多边形网格模型中四种类型的边。1)边界边。即只被一个多边形或......
  • VTK随笔九:VTK图形处理(vtkPolyData数据生成与显示、基本的图形操作、网络平滑)
            图形数据的应用非常广泛,最贴近日常生活的应该是3D游戏,其中每个角色的模型场景等都是图形数据。当然,游戏仅仅是图形数据的一个应用点,图形在CAD(计算机辅助设计)、影视、医学、地质、气象数据建模等领域中均有着广泛的应用。vtkPolyData是VTK中常用的数据结构......
  • 《C++模板元编程:编程世界的魔法艺术》
    在C++的广阔编程领域中,模板元编程犹如一种神秘而强大的魔法艺术,为开发者打开了一扇通往极致性能与高度灵活性的大门。那么,究竟什么是模板元编程?又该如何在C++中进行模板元编程呢?首先,让我们来理解一下模板元编程的概念。模板元编程是一种在编译期进行计算和代码生成的技术......
  • c++偶现问题备录
    目录C++偶现问题备录1.偶现问题源码2.问题根因分析3.修复问题源码C++偶现问题备录1.偶现问题源码源码示例如下:classKZNCalculationException:publicstd::exception{public:#ifdefKZN_LINUXKZNCalculationException(GStringAMsg,GStringAHit):st......
  • Qt | Qt是C++最好的图形界面开发库(学习路线图)
    点击上方"蓝字"关注我们01、WhatisQt?>>>Qt是一个跨平台的C++图形用户界面库,目前包括QtCreator、QtDesigner等等快速开发工具。Qt支持所有Linux/Unix系统,还支持windows平台。Qt很容易扩展,并且允许真正地组件编程。Qt与GTK、MFC、OWL、ATL 是一样的图形界......
  • C++基础面向对象特征
    目录学习目标:学习内容:1.C++对函数的扩充1.1函数重载(overload)1.1.1 概念1.1.2 要求1.2 函数的默认参数 1.3哑元 1.4内联函数        内联函数与带参宏的区别(重要)2.封装2.1面向对象的三大特质2.2C++中的类(class)2.3定义格式2.4 this指......
  • 【C++ Primer Plus习题】6.9
    问题:解答:#include<iostream>#include<string>#include<fstream>usingnamespacestd;typedefstruct_Donor{ stringname; doublemoney;}Donor;intmain(){ ifstreamfile; stringfilename; intcount=0; cout<<"请......
  • 【C++二分查找】2271. 毯子覆盖的最多白色砖块数
    本文涉及的基础知识点C++二分查找LeetCode2271.毯子覆盖的最多白色砖块数给你一个二维整数数组tiles,其中tiles[i]=[li,ri],表示所有在li<=j<=ri之间的每个瓷砖位置j都被涂成了白色。同时给你一个整数carpetLen,表示可以放在任何位置的一块毯子的长度......