const成員變量初始化總結


 

const可以用來聲明常量也就是說他的值不能被修改;

const成員必須在定義的時候同時初始化,不能進行賦值  

 

如 const int a;a的值不能修改,不能給它賦值,如何才能讓它一開始就擁有一個值?

1、在聲明的時候對他進行初始化

    const int a=1;

2、在函數中聲明的形參,在函數被調用時會得到實參的值。

 

但是如果在類中呢?

1 class Demo
2 {
3     const int ci;
4 public:
5     void get_ci()
6     {
7     return ci;
8     }
9 };

當直接用這個類定義一個對象時,會出錯,提示沒有初始化const成員變量值 且提示ci是一個只讀的變量

const用於類中成員變量時,將類成員變為只讀屬性(只讀:不能出現在“=”的左邊,但在類中仍可以用一個指針來修改其值。) 所以不可以直接在類的構造函數中初始化const 的成員。

 

const成員變量只可以初始化列表中初始化

代碼:

 1 #include<iostream>
 2 using namespace std;
 3 class Demo
 4 {
 5 private:
 6     const int ci;
 7 public:
 8     Demo() :ci(10)
 9     {
10 
11     }
12     int getci()
13     {
14         return ci;
15     }
16     int setci(int i)
17     {
18         int* mi =(int *) &ci;
19         *mi = i;
20         return ci;
21     }
22 };
23 int main()
24 {
25     Demo d;
26     cout << "ci=" << d.getci();
27 
28     d.setci(90);
29     cout << "ci=" << d.getci();
30 
31     getchar();
32     return 0;
33 }

 

初始化列表是先於構造函數的函數體執行,

並且成員的初始化列表與成員的聲明順序相同的 

 

C語言中的const其實只是只讀變量可以用指針間接改變其值

const修飾的局部變量在棧上分配內存空間

const修飾的全局變量在只讀存儲區分配內儲存空間

 

 

 1 #include <stdio.h>
 2 
 3 
 4 int main(void)
 5 {
 6     const int a=0;
 7     int *p= &a;
 8     *p=5;
 9     printf("*p=%d\n",*p);//5
10     printf("a=%d \n",a);//5
11     printf("&a=%p p=%p",&a,p);//相同
12     return 0;
13 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM