1.用C++寫個程序,如何判斷一個操作系統(tǒng)是16位還是32位的到千?不能用sizeof()函數(shù)?
int a=~0;
if(a>65536)
cout<<"32 bit"<<endl;
else
cout<<"16 bit"<<endl;
2.不用循環(huán)實現(xiàn)1+2+...+n的和
class Temp
{
public:
Temp() {++N;sum+=N;}
static void Reset() {N=0;sum=0;}
static int GetSum() {return sum;}
private:
static int N;
static int sum;
}
int sum(int n)
{
Temp::Reset();
Temp *a=new Temp[n];
delete a[];
a=NULL;
return Temp::GetSum();
}
3.不用加減乘除實現(xiàn)加法
int sum(int num1,int num2)
{
int sum=0,carry=0;
do{
sum = num1 ^ num2;
carry = (num1 & num2)<<1;
num1=sum;
num2=carry;
}while(num2!=0)
return num1;
}
4.不能被繼承的類
class sealClass
{
public:
static sealClass* getInstance()
{ return new sealClass();}
static void deleteInstance(sealClass *pInstance)
{delete *pInstance;}
private:
sealClass() {}
~sealClass() {}
} ;
5.C++中哪些函數(shù)不能被聲明為虛函數(shù)沦泌?
答:普通函數(shù)(非成員函數(shù))妥畏,構(gòu)造函數(shù)视粮,內(nèi)聯(lián)成員函數(shù)掀泳、靜態(tài)成員函數(shù)况既、友元函數(shù).
(1)虛函數(shù)用于基類和派生類阅嘶,普通函數(shù)所以不能
(2)構(gòu)造函數(shù)不能是因為虛函數(shù)采用的是虛調(diào)用的方法属瓣,允許在只知道部分信息的情況的工作機(jī)制,
特別允許調(diào)用只知道接口而不知道對象的準(zhǔn)確類型的方法讯柔,但是調(diào)用構(gòu)造函數(shù)即使要創(chuàng)建一個對象抡蛙,
那勢必要知道對象的準(zhǔn)確類型。
(3)內(nèi)聯(lián)成員函數(shù)的實質(zhì)是在調(diào)用的地方直接將代碼擴(kuò)展開
(4)繼承時魂迄,靜態(tài)成員函數(shù)是不能被繼承的粗截,它只屬于一個類,因為也不存在動態(tài)聯(lián)編等
(5)友元函數(shù)不是類的成員函數(shù)极祸,因此也不能被繼承
6.拷貝構(gòu)造函數(shù)相關(guān)問題慈格,深拷貝,淺拷貝遥金,臨時對象等
答:在C++中浴捆,三種對象需要拷貝的情況:一個對象以值傳遞的方式傳入函數(shù)體,一個對象以值傳遞的方式從函數(shù)返回稿械,一個對象需要通過另外一個對象進(jìn)行初始化选泻。執(zhí)行先父類后子類的構(gòu)造,對類中每一個數(shù)據(jù)成員遞歸地執(zhí)行成員拷的動作美莫。
深拷貝:如果一個類擁有資源页眯,深拷貝意味著拷貝了資源和指針
淺拷貝:如果對象存在資源,而淺拷貝只是拷貝了指針厢呵,沒有拷貝資源窝撵,這樣使得兩個指針指向同一份資源,造成對同一份析構(gòu)兩次襟铭,程序崩潰碌奉。臨時對象的開銷比局部對象小些短曾。
7.static相關(guān)
static成員函數(shù)沒有this指針,同時不能訪問非static的成員變量赐劣,同時static成員函數(shù)不能是const嫉拐,同時不能為虛函數(shù)
static數(shù)據(jù)成員必須在類定義體外部定義,不像普通數(shù)據(jù)成員魁兼,其不是在構(gòu)造函數(shù)中進(jìn)行初始化婉徘,需在定義時進(jìn)行初始化。如果是const static數(shù)據(jù)成員可以在聲明的時候進(jìn)行初始化