返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++是怎么构造函数的初始化列表
  • 382
分享到

C++是怎么构造函数的初始化列表

2023-06-22 03:06:04 382人浏览 安东尼
摘要

c++是怎么构造函数的初始化列表,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1.问题class A {private:int m_a;publi

c++是怎么构造函数的初始化列表,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

1.问题

class A {private:int m_a;public:A(int a) {cout << "A(int a)......." << endl;m_a = a;}void print() {cout <<"m_a=" << m_a << endl;}};class B {private:int m_b;A m_a1;A m_a2;public:B(A& a1,A& a2, int b) {m_b = b;m_a1(a1);//此处调用A的拷贝函数会报错m_a2(a2);//此处调用A的拷贝函数会报错}};

错误:

C++是怎么构造函数的初始化列表

C++是怎么构造函数的初始化列表

2.解决方法(初始化列表)

将class B构造函数改写为:

public:B(A& a1,A& a2, int b) :m_a1(a1),m_a2(a2)//构造函数的初始化列表{m_b = b;}};

完整代码如下:

#include <iOStream>using namespace std;class A {private:int m_a;public:A(int a) {cout << "A(int a)......." << endl;m_a = a;}void print() {cout <<"m_a=" << m_a << endl;}A(const A& another) {m_a = another.m_a;}~A() {cout << "~A()......" << endl;}};class B {private:int m_b;A m_a1;A m_a2;public:B(A& a1,A& a2, int b) :m_a1(a1),m_a2(a2)//构造函数的初始化列表,调用拷贝构造{cout << "B(A& a1,A& a2, int b)......." << endl;m_b = b;}~B() {cout << "~B()......." << endl;cout << "m_b=" << m_b  << endl;cout << "A m_a1" << endl;m_a1.print();cout << "A m_a2" << endl;m_a2.print();}};int main(int arGC, char** argv) {A a1(1), a2(2);B b1(a1, a1, 3);}

运行结果:

C++是怎么构造函数的初始化列表

3.顺序问题

构造对象成员的顺序跟初始化列表的顺序无关,而是跟成员对象定义的顺序有关。(面试会问)

例子:

class A {private:int m_a;public:A(int a) {cout << "A(int a)......." <<a<< endl;m_a = a;}void print() {cout <<"m_a=" << m_a << endl;}A(const A& another) {m_a = another.m_a;}~A() {cout << "~A()......"<< endl;}};class B {private:int m_b;A m_a2;A m_a1;public:B(int a1, int a2, int b) :m_a1(a1), m_a2(a2)//调用有参构造函数{cout << "B(int a1, int a2, int b)......." << endl;m_b = b;}~B() {cout << "~B()......." << endl;}};int main(int argc, char** argv) {B b2(1, 2, 3);}

结果:

C++是怎么构造函数的初始化列表

跟下面顺序有关:

private:A m_a2;A m_a1;

跟下面顺序无关:

B(int a1, int a2, int b) :m_a1(a1), m_a2(a2)//调用有参构造函数

看完上述内容,你们掌握C++是怎么构造函数的初始化列表的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网其他教程频道,感谢各位的阅读!

--结束END--

本文标题: C++是怎么构造函数的初始化列表

本文链接: https://lsjlt.com/news/302154.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C++是怎么构造函数的初始化列表
    C++是怎么构造函数的初始化列表,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1.问题class A {private:int m_a;publi...
    99+
    2023-06-22
  • 怎么使用c#构造函数初始化列表
    在C#中,可以使用构造函数初始化列表来初始化类的成员变量。构造函数初始化列表是在构造函数的参数列表后面使用冒号来定义的。下面是一个示...
    99+
    2023-09-28
    c#
  • C++构造函数的初始化列表详解
    目录1.问题2.解决方法(初始化列表)3.顺序问题总结 1.问题 class A { private: int m_a; public: A(int a) { cout ...
    99+
    2024-04-02
  • c++构造函数初始化列表的方法是什么
    在C++中,构造函数初始化列表是一种在构造函数中初始化成员变量的方法。它使得在对象创建时直接初始化成员变量,而不是在构造函数体中进行...
    99+
    2024-03-12
    c++
  • C++之谈谈构造函数的初始化列表
    目录一、引入二、初始化的概念区分三、语法格式及使用四、注意事项【⭐】五、总结与提炼一、引入 我们知道,对于下面这个类A的成员变量_a1和_a2属于【声明】,还没有在内存中为其开辟出一...
    99+
    2023-05-15
    C++构造函数 C++构造函数初始化列表 C++初始化列表
  • c++基础语法:构造函数初始化列表
    C++为类中提供类成员的初始化列表 类对象的构造 顺序是这样的:1.分配内存,调用构造函数 时,隐式/显示的初始化各数据 成员2.进入构造函数后在构造函数中执行一般计算 使用初始化...
    99+
    2022-11-15
    构造函数 初始化列表
  • C++构造函数初始化列表的实现详解
    目录1.前言2.初始化列表3.注意事项1.前言 初始化就是给变量一个初始值。 初始化的目的是为了让变量有值,防止使用时出现异常。 在构造函数中,有一项重要功能就是对成员变量进行初始化...
    99+
    2024-04-02
  • C++类初探常量成员函数与构造函数初始值列表分析
    这篇文章主要讲解了“C++类初探常量成员函数与构造函数初始值列表分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++类初探常量成员函数与构造函数初始值列表分析”吧!头文件mycpp.h#...
    99+
    2023-06-04
  • C++11列表初始化是怎样的
    这篇文章主要介绍“C++11列表初始化是怎样的”,在日常操作中,相信很多人在C++11列表初始化是怎样的问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++11列表初始化是怎样的”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-19
  • C++初始化函数列表详细解析
    在以下三种情况下需要使用初始化成员列表: 一,需要初始化的数据成员是对象的情况; 二,需要初始化const修饰的类成员; 三,需要初始化引用成员数据; 原因:C++可以定义引用类型的...
    99+
    2022-11-15
    初始化函数列表
  • C++11关联容器的列表怎么初始化
    本篇内容介绍了“C++11关联容器的列表怎么初始化”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是关联容器关联容器(associativ...
    99+
    2023-06-19
  • c++中类的构造函数可以初始化静态成员变量吗
    c++ 中类的构造函数可以初始化静态成员变量。初始化语法如下:在构造函数中使用 staticmembervariable = ...; 声明。静态成员变量仅在第一次执行构造函数时初始化一...
    99+
    2024-05-09
    c++
  • C++11中列表初始化机制的概念是什么
    本篇内容介绍了“C++11中列表初始化机制的概念是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!概述定义:列表初始化是C++11引入的新...
    99+
    2023-06-25
  • 解析之C++的列表初始化语法
    目录聚合初始化大括号省略(brace elision)std::initializer_list的另一个故事连《Effective Modern C++》都弄错了的规则构造函数的两步...
    99+
    2024-04-02
  • C++初始化列表的方法有哪些
    本篇内容介绍了“C++初始化列表的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、类的初始化表首先是类中使用构造函数时的初始化表...
    99+
    2023-07-05
  • C#怎么初始化数组
    本篇内容介绍了“C#怎么初始化数组”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!初始化数组声明一个数组不会在内存中初始化数组。当初始化数组变...
    99+
    2023-06-17
  • C++深入讲解初始化列表的用法
    目录一、小问题二、类成员的初始化三、类中的 const 成员四、初始化与赋值的不同五、小结一、小问题 下面的类定义是否合法 如果合法,ci 的值是什么,存储在哪里 下面编写代码一探...
    99+
    2024-04-02
  • C++的构造函数和析构函数是什么
    本篇内容主要讲解“C++的构造函数和析构函数是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++的构造函数和析构函数是什么”吧!目录一、构造函数二、C++类的内存模型1、只定义成员函数2、...
    99+
    2023-06-20
  • 怎么使用java构造方法初始化对象
    在Java中,可以使用构造方法来初始化对象。构造方法是一种特殊的方法,用于创建和初始化对象。构造方法的名称必须与类名相同,没有返回类...
    99+
    2023-09-01
    java
  • C#中怎么初始化数组
    这篇文章给大家介绍C#中怎么初始化数组,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。C#数组初始化三大方法示例// Single-dimensional array (numbers).&...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作