引用成员变量和const成员变量初始化

  • 引用成员变量和const成员变量初始化只能通过成员初始化列表初始化。引用成员变量地址会变为对应初始化变量的地址。
  • 引用成员变量和const成员变量在class中定义未声明时,和普通成员变量是一样的,对象通过成员初始化列表后,或者进入构造函数内部代码块那一刻,才会赋予引用和const的职能
  • 普通成员变量(非引用)和const成员变量通过成员初始化列表会调用对应类的拷贝构造函数。
 1 class B
 2 {
 3 public:
 4     B(int& a ):b(a)
 5     { 
 6         cout << "B的构造函数" << endl;
 7     }
 8 
 9     B(B& a) :b(a.b)
10     {
11         cout << "B的拷贝构造函数"<<endl;
12     }
13 
14 private:
15     int& b;
16 };
17 
18 class NameObject
19 {
20 public:
21     NameObject(string& str, B& btemp1, B& btemp2) :
22         nameValue(str),
23         bob(btemp1),        //  调用B的拷贝构造函数
24         baba(btemp2)        //  调用B的拷贝构造函数
25     {
26         printf("变量str地址      :%p\n", &str);
27         printf("变量nameValue地址:%p\n", &nameValue);
28         printf("变量btemp1地址   :%p\n", &btemp1);
29         printf("变量bob地址      :%p\n", &bob);
30         printf("变量btemp2地址   :%p\n", &btemp2);
31         printf("变量baba地址     :%p\n", &baba);
32         cout << "NameObject的构造函数" << endl;
33     }
34 
35 public:
36     string& nameValue;
37     const B bob;
38     B baba;
39 };
40 
41 
42 
43 int main()
44 {
45     string str{ "str" };
46     printf("str地址          :%p\n", &str);
47     int a1 = 3, a2 = 4;
48     B b1{ a1};
49     B b2{ a2 };
50     printf("b1地址           :%p\n", &b1);
51     printf("b2地址           :%p\n", &b2);
52     NameObject n1{ str, b1, b2};
53     return 0;
54 }

 

posted @ 2021-12-11 01:05  补码  阅读(422)  评论(0编辑  收藏  举报