您好,登錄后才能下訂單哦!
Q:下面程序類的定義是否合法?
#include <iostream>
using namespace std;
class Test
{
private:
const int ci;
public:
Test()
{
ci=10;
}
int getCi()
{
return ci;
}
};
int main()
{
Test t;
cout<<"t="<<t<<endl;
}
結(jié)果
可以看出錯誤是const定義的是只讀并且沒有進行初始化,對其進行修改后正確的初始化程序與結(jié)果如圖所示
類成員的初始化:
1.C++中提供了初始化列表對成員變量進行初始化
2.語法規(guī)則
注意事項
1.成員的初始化順序與成員的聲明順序相同
2.成員的初始化順序與初始化列表中的位置無關
3.初始化列表先于構(gòu)造函數(shù)的函數(shù)體執(zhí)行
代碼示例及結(jié)果
#include <iostream>
using namespace std;
class Value
{
private:
int mi;
public:
Value(int i)
{
cout<<"i="<<i<<endl;;
mi = i;
}
int getI()
{
return mi;
}
};
class Test
{
private:
Value m2;
Value m3;
Value m1;
public:
Test() : m1(1), m2(2), m3(3)
{
cout<<"Test()"<<endl;
}
};
int main()
{
Test t;
return 0;
}
類中的const成員
1.類中的const成員會被分配空間
2.類中的const成員的本質(zhì)是只讀變量
3.類中的const成員只能在初始化列表中指定初始值
代碼示例及結(jié)果
#include <iostream>
using namespace std;
class Value
{
private:
int mi;
public:
Value(int i)
{
cout<<"i="<<i<<endl;
mi = i;
}
int getI()
{
return mi;
}
};
class Test
{
private:
const int ci;
Value m2;
Value m3;
Value m1;
public:
Test() : m1(1), m2(2), m3(3), ci(100)
{
cout<<"Test()"<<endl;
}
int getCi()
{
return ci;
}
int setCi(int v)
{
int* p = const_cast<int*>(&ci);
*p = v;
}
};
int main()
{
Test t;
cout<<"t.getCi()"<<t.getCi()<<endl;
t.setCi(10);
cout<<"t.getCi()"<<t.getCi()<<endl;
return 0;
}
我們要知道初始化與賦值不同
1.初始化:對正在創(chuàng)建的對象進行初值設置
2.賦值:對已經(jīng)存在的對象進行值設置
小結(jié)
1.類中可以使用初始化列表對成員進行初始化
2.初始化列表先于構(gòu)造函數(shù)體執(zhí)行
3.類中可以定義const成員變量
4.const成員變量必須在初始化列表中指定初值
5.const成員變量為只讀變量
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。