04 初始化列表

初始化列表 initialize list

在构造函数的括号后面加上 : 然后写上成员变量的名字,在括号里给出成员变量的初始值

A():p(0){ cout << "A::A()" << endl; } // 初始化列表

这个操作会早于构造函数的执行

#include<iostream>
using namespace std;

struct A{
    int i;
    int *p;
public:
    // A(){ p=0; cout << "A::A()" << endl; } 
    A():p(0){ cout << "A::A()" << endl; } // 初始化列表	
    ~A() { if (p) delete p; cout << "A::~A()" << i << endl; }
    void set(int ii) { i = ii; }
    void f() {  p = new int ; }
    void g(A* q) {cout << "A::g(), q->i=" << q->i << endl; }
};

int main(){
    A* p = new A[10];
    for ( int i =0; i<10; i++)
        p[i].set(i);
    A b;
    b.set(100);
    p[0].g(&b);
    delete[] p;
}
  • 可以初始化任何数据类型

  • 使用初始化列表初始化数据会早于构造函数的执行

    • 只做一件事,初始化

      而放在大括号里 需要两件事初始化和赋值

      如果是对象的话,放在大括号里面,对象会先调用default-constructor初始化。如果你没有default-constructor的话,则会报错

      #include<iostream>
      using namespace std;
      
      class B{
      public:
          B(int i){}
          // B(){}
      };
      
      struct A{
          int i;
          int *p;
          B b;
      public:
          A():p(0) { b=0; cout << "A::A()" << endl; } 
          ~A() { if (p) delete p; cout << "A::~A()" << i << endl; }
          void set(int ii) { i = ii; }
          void f() {  p = new int ; }
          void g(A* q) {cout << "A::g(), q->i=" << q->i << endl; }
      };
      
      int main(){
          A* p = new A[10];
          for ( int i =0; i<10; i++)
              p[i].set(i);
          A b;
          b.set(100);
          p[0].g(&b);
          delete[] p;
      }
      

类里面的所有成员变量都使用 初始化列表来做初始化,不要在构造函数里面做赋值

对象组合 composition

内存模型的复杂度

  • fully
  • by reference

对象里的对象 权限应该设置为private

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值