C++的初始化列表

前言

被一道题目困扰了好久,搞死我了。一直学Java的我,根本不知道C++竟然有这种神仙玩意儿,实属给我整懵了。

它是个啥

  • Initializers List

  • 顾名思义,就是初始化 ,但和构造函数的赋值不同的是

    • 初始化列表在对象被构造前执行
    • 构造函数的赋值是在构造时执行

使用

  • "a(value)" 即 “a = value”

搞我的题目

  • 要求输出

5,5

5,5

#include <iostream>
using namespace std;

class Base
{
public: 
    int k;
    Base(int n):k(n) {}//类型转换构造函数
};
class Big
{
public:
    int v;
    Base b;
    /*
    	题目原来是:
    	Big【      】
    	Big【      】
    	【填空题】
    */
    Big
    Big

};
int main()
{
    Big a1(5);
    Big a2 = a1;
    cout << a1.v << "," << a1.b.k << endl;
    cout << a2.v << "," << a2.b.k << endl;
    return 0;
}
  • 咱来分析一下,观察一下Big的成员变量

    • int v
    • Base b
  • 巧了,Base是个类,那我们再看看Base类

class Base
{
public: 
    int k;
    Base(int n):k(n) {}//类型转换构造函数
};
  • 很容易看到,它没有无参构造函数,它不像Java那样有默认无参构造啊!!!而,Big类里面,直接Base b,没有初始化,动不动就给你丢个“no match”恶心你。

  • 那咋办??对象创建了,得构造啊!!!!成员变量不都得准备好嘛!!!!

  • 所以,只要我E得够快初始化在构造之前,不就行了吗!!!!!!

  • 所以用到我们的初始化列表

Big():b(0){this->v=0;}
Big(int n):b(n){this->v = n;}

好言相劝

  • 所以呀,以后凡是要构造赋值的,直接整这个就完了!!!a(v)

出答案了哈哈哈哈哈哈,写错了,尴尬的一批

我的原答案:

// 题目没说要0,这边要写的应该是【拷贝构造】!!!
Big():b(0){this->v=0;}
// 要用初始化列表就都用,不要用一半,{}空着就空着
Big(int n):b(n){this->v = n;}

老师给的答案:

Big(const Big& a):v(a.v),b(a.b.k){}
Big(int n):v(n),b(n){}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值