首页 > 其他分享 >区分:派生类指定基类构造函数、继承构造、委托构造

区分:派生类指定基类构造函数、继承构造、委托构造

时间:2024-10-16 11:49:04浏览次数:6  
标签:委托 int 派生类 构造 基类 构造函数

  • 普通的和委托的区别是:同一个类,多个类之间【派生类-基类】
  • 普通的和继承构造的区别:是否要手动指明
// 1. 派生类显示调用基类构造函数初始化
class A {
public:
    A(int x, int y) {
        std::cout << "A(x, y) called" << std::endl;
    }
};

class B : public A {
public:
    B(int a, int b, int c) : A(a, b) {   // 手动调用A的构造函数
        std::cout << "B(a, b, c) called" << std::endl;
    }
};

int main() {
    B obj(1, 2, 3); 
}

// 特点:手动指定基类的构造函数,不能自动继承构造。

// 2. C++11, 使用using自动继承基类的构造函数
class A {
public:
    A(int x, int y) { }
};

class B : public A {
public:
    using A::A;   // 继承基类A的构造函数
};

int main() {
    B obj(1, 2);  // 直接使用A的构造函数
}

// 特点:自动继承构造函数,不需要显式初始化基类。

// 3. C++11, 委托构造:在同一个类中,一个构造函数调用另一个构造函数
class A {
    int m_a, m_b;
public:
    A(int x, int y) : m_a(x), m_b(y) {
        cout << "A(int, int)" << endl;
    }
    
    // 委托构造:委托给 A(int, int) 进行初始化
    A(int x, int y, const string& str) : A(x, y) {
        cout << "str = " << str << endl;
    }
};

// 特点:同类中不同构造函数之间的复用,适合代码共享。

标签:委托,int,派生类,构造,基类,构造函数
From: https://www.cnblogs.com/albertmak/p/18469579

相关文章

  • YOLOv11改进 | 代码逐行解析(一) | 项目目录构造分析
     一、本文介绍Hello,大家好这次给大家带来的不是改进,是整个YOLOv11项目的分析,整个系列大概会更新5-7篇左右的文章,从项目的目录到每一个功能代码的都会进行详细的讲解,下面开始进行YOLOv11逐行解析的第一篇——项目目录构造分析开头之前顺便给大家推荐一下我的专栏,本专栏更新上......
  • 禁止拷贝构造函数和赋值操作符
     GlobalSettings(constGlobalSettings&)=delete;GlobalSettings&operator=(constGlobalSettings&)=delete;这两行代码是为了禁止拷贝构造函数和赋值操作符,也就是说,GlobalSettings 类的对象无法通过拷贝或赋值来创建或修改。这是为了防止类的实例被复制,通常用于实现单......
  • 代码随想录算法训练营day16| 513.找树左下角的值 112.路径总和 106.从中序和后序
    学习资料:https://programmercarl.com/0513.找树左下角的值.html#算法公开课递归、回溯返回值:True/False,root构建二叉树TrueNode(root_value)513.找树左下角的值(实例变量self.result,self.maxdepth;找到叶子节点,若深度>self.maxdepth,则更新最大深度;只考虑左和右子树,用递归+......
  • 初识构造器
    1.构造器定义构造器也可称为构造方法,本质就是用来调动其他类到另一个类里达到实例化的方法。2.构造器的特征1.名称必须与类名一致2.不能有返回值3.构造器的作用1.用于new关键字调动构造方法,从而使得类可以被实例化(一个类即使什么都没写,也有默认的构造器,方便于调动,默认构造......
  • C++ 面向对象、特征、重载和重写、构造和析构、向上和向下转型、深浅拷贝。
    什么是面向对象(Object-OrientedProgramming,OOP)1.面向对象是一种编程范式,它通过将软件系统的设计和开发分解为“对象”(Object)的方式来实现更好地组织代码。面向对象的核心思想是将程序的结构分为对象,这些对象包含数据和操作这些数据的函数(即方法)。每个对象是类的实例,而类定......
  • ArrayList源码分析(底层数据结构,成员变量,构造方法)以及面试题(基于JDK1.8)
    要分析Arraylist,我们首先要从它的底层数据结构实现出发,再结合其底层源码,可能能让读者理解的更加深刻一点。1,底层数据结构(数组)Arraylist底层是基于动态数组实现的。数组是一种使用连续储存空间储存相同数据类型的线性数据结构。面试题1为什么数组索引从0开始不从1开始?分......
  • JavaScript进阶笔记--深入对象-内置构造函数及案例
    深入对象创建对象三种方式利用对象字面量newObject({…})利用构造函数//1.字面量创建对象constobj1={name:'pig',age:18};console.log(obj1);//{name:"pig",age:18}//2.构造函数创建对象functionPig(name,age){......
  • 软件构造,生成算式采用CSV、XML、JSON三种形式进行存储并读取。
    编写代码完成将生成的算式及习题长期保存下来,采用CSV、XML、JSON三种形式进行存储并读取。提交相关代码及运行截图。importrandomimportcsvimportjsonimportxml.etree.ElementTreeasETfromxml.domimportminidom#生成随机算式数据defgenerate_exercises(count......
  • Java如何写一个构造函数
     构造函数是类的一个特殊成员函数,它在创建对象时被调用,用于初始化新创建的对象。在Java中,构造函数的名称必须与类名完全相同,没有返回类型(包括void)。构造函数可以有参数,也可以没有。Java中的构造函数示例假设我们想要创建一个Person类,包含name和age两个属性。我们可以这样定......
  • Java如何调用构造函数和方法以及使用
    调用构造函数的格式构造函数在创建新对象时被调用。调用格式如下:ClassNameobjectName=newClassName(parameters);ClassName:你需要创建其实例的类的名称。objectName:你将创建的对象的名称。parameters:如果你使用的是带有参数的构造函数,这里需要传递相应的参数。示例:......