C和C++經(jīng)典筆試題附答案解析
C和C++經(jīng)典筆試題附答案解析
C語(yǔ)言是一門通用計(jì)算機(jī)編程語(yǔ)言,應(yīng)用廣泛。C語(yǔ)言的設(shè)計(jì)目標(biāo)是提供一種能以簡(jiǎn)易的方式編譯、處理低級(jí)存儲(chǔ)器、產(chǎn)生少量的機(jī)器碼以及不需要任何運(yùn)行環(huán)境支持便能運(yùn)行的編程語(yǔ)言。下面就由學(xué)習(xí)啦小編為大家介紹一下C和C++經(jīng)典筆試題附答案解析的文章,歡迎閱讀。
C和C++經(jīng)典筆試題附答案解析篇1
1. 用預(yù)處理指令#define聲明一個(gè)常數(shù),用以表明1年中有多少秒(忽略閏年問題)。
答案:#define SECONDS_PER_YEAR(60*60*24*365)UL
應(yīng)該意識(shí)到表達(dá)式將使一個(gè)16位機(jī)的整形數(shù)溢出,因此要用到長(zhǎng)整型符號(hào)L,表達(dá)式中UL表示無(wú)符號(hào)長(zhǎng)整型。
2. 寫一個(gè)“標(biāo)準(zhǔn)”宏MIN,這個(gè)宏輸入連個(gè)參數(shù)并返回較小的一個(gè)。
答案:#define MIN(A,B) ((A)<=(B)?(A):(B));懂得在宏中小心的吧參數(shù)用括號(hào)擴(kuò)起來(lái)
3. sizeof 的一些考察
char* ss1=”0123456789”; char ss2[]=”0123456789”; char ss3[100]=”0123456789”;
int ss4[100]; char q1[]=”abc”; char q2[]=”a\n”; char* q3=”a\n”;
答案:ss1是一個(gè)字符指針,指針的大小是一個(gè)確定的值,就是4,sizeof(ss1)=4;
ss2是一個(gè)字符數(shù)組,這個(gè)數(shù)組最初的大小未定,填充值是“0123456789”,一個(gè)字符占一位,再加上隱含的“
C和C++經(jīng)典筆試題附答案解析
C和C++經(jīng)典筆試題附答案解析
C語(yǔ)言是一門通用計(jì)算機(jī)編程語(yǔ)言,應(yīng)用廣泛。C語(yǔ)言的設(shè)計(jì)目標(biāo)是提供一種能以簡(jiǎn)易的方式編譯、處理低級(jí)存儲(chǔ)器、產(chǎn)生少量的機(jī)器碼以及不需要任何運(yùn)行環(huán)境支持便能運(yùn)行的編程語(yǔ)言。下面就由學(xué)習(xí)啦小編為大家介紹一下C和C++經(jīng)典筆試題附答案解析的文章,歡迎閱讀。
C和C++經(jīng)典筆試題附答案解析篇1
1. 用預(yù)處理指令#define聲明一個(gè)常數(shù),用以表明1年中有多少秒(忽略閏年問題)。
答案:#define SECONDS_PER_YEAR(60*60*24*365)UL
應(yīng)該意識(shí)到表達(dá)式將使一個(gè)16位機(jī)的整形數(shù)溢出,因此要用到長(zhǎng)整型符號(hào)L,表達(dá)式中UL表示無(wú)符號(hào)長(zhǎng)整型。
2. 寫一個(gè)“標(biāo)準(zhǔn)”宏MIN,這個(gè)宏輸入連個(gè)參數(shù)并返回較小的一個(gè)。
答案:#define MIN(A,B) ((A)<=(B)?(A):(B));懂得在宏中小心的吧參數(shù)用括號(hào)擴(kuò)起來(lái)
3. sizeof 的一些考察
char* ss1=”0123456789”; char ss2[]=”0123456789”; char ss3[100]=”0123456789”;
int ss4[100]; char q1[]=”abc”; char q2[]=”a\n”; char* q3=”a\n”;
答案:ss1是一個(gè)字符指針,指針的大小是一個(gè)確定的值,就是4,sizeof(ss1)=4;
ss2是一個(gè)字符數(shù)組,這個(gè)數(shù)組最初的大小未定,填充值是“0123456789”,一個(gè)字符占一位,再加上隱含的“\0”一共是11位。
ss3是一個(gè)字符數(shù)組,這個(gè)數(shù)組開始預(yù)分配100,所以它的大小是100位。
ss4是一個(gè)整型數(shù)組,但是每個(gè)整型變量所占空間是4,所以它的大小一共是400位。
q1與ss2類似,占4位。Q2里面有一個(gè)“\n”,“\n”算作一位,加上隱含的,大小一共是3位。Q3是一個(gè)字符指針,指針得大小是一個(gè)定值,就是4.
4. What is the output of the following code?
#include
using namespace std;
class A {};
class A2 {char d,e;};
struct B{};
struct C{ char x,y;};
struct D{int x,y;};
main()
{
cout<
cout<
A *p1=new A();
A p2;
A*p3;
cout<
cout<
cout<
cout<
cout<
cout<
return 0;
}
答案:對(duì)于一個(gè)類而言,即便它是一個(gè)空的類,編譯器仍然要要給它一個(gè)空間,所以類A即便什么也沒有,它的空間大小依然為1,而類A2大小是類中連個(gè)字符d,e之和,所以它的空間大小依然是2,至于p1,p2,p3,p1和p3是指針,大小是一致的,而且是定值,為4,p2是A的對(duì)象,所以它的大小和類A相等,為1,B和C得解釋同A和A2,至于D,它和C不同點(diǎn)在于,結(jié)構(gòu)體有兩個(gè)整型變量,每個(gè)整型變量所占空間為4,所以D所占空間大小為8。
最后結(jié)果是 1, 2,4, 1,4,1,2,8
5. what is the output the following code?
#include using namespace std;
class A1 { public: int a; static int b;A1(); ~A1();}; 4
class A2 { public: int a; char c; A2(); ~A2();}; 8
class A3 { public: float a; char c; A3(); ~A3();}; 8
class A4 { public: float a; int b; char c; A4(); ~A4();}; 12
class A5 { public: double d; float a; int b; char c; A5(); ~A5();} 24
int main() { cout<
答案:因?yàn)殪o態(tài)變量是存放在全局?jǐn)?shù)據(jù)區(qū)的,sizeof計(jì)算棧中分配的大小,是不會(huì)計(jì)算在內(nèi)的,所以sizeof(A1)是4;為了照顧數(shù)據(jù)對(duì)其,int大小為4,char大小為1,所以sizeof(A2)是8;為了照顧數(shù)據(jù)對(duì)其,float大小為4,char大小為1,所以sizeof(A3)為8;為了照顧數(shù)據(jù)對(duì)其,float大小為4,int大小為4,char大小為1,所以sizeof(A4)為12;為了照顧數(shù)據(jù)對(duì)其,double大小為8,float大小為4,int大小為4,char大小為1,所以sizeof(A5)為24。
6. 以下代碼的輸出結(jié)果是()
char var[]
Int test(char var[]){ retrun sizeof(var);}
答案:因?yàn)関ar[]等價(jià)于*var,已經(jīng)退化成一個(gè)指針了,所以大小是4.
7. 以下代碼的輸出結(jié)果是()
Class B { float f; char p; int asf[3];}; cout<
答案:float f占了4個(gè)字節(jié),char p占了一個(gè)字節(jié),int adf[3]占了12個(gè)字節(jié),總共是17個(gè),根據(jù)內(nèi)存的對(duì)齊原則,要選擇4的倍數(shù),是20個(gè)字節(jié)。
8. 以下代碼的輸出結(jié)果是()
Class B { double d; char p; int asf[4];}; cout<
答案:double d占了8個(gè)字節(jié),char p占了一個(gè)字節(jié),int adf[4]占了16個(gè)字節(jié),總共是25個(gè),根據(jù)內(nèi)存的對(duì)齊原則,要選擇8的倍數(shù),是32個(gè)字節(jié)。
9. 一個(gè)空類所占空間為1,多重繼承的空類所占的空間還是1,但是虛繼承涉及到虛表(虛指針),所以虛繼承的空類占的空間為4
10. this指針是在實(shí)例化一個(gè)對(duì)象后產(chǎn)生的,并且指向?qū)ο蟊旧?比如實(shí)例化一個(gè)對(duì)象pt,那么this=&pt;用”&”取地址符來(lái)取對(duì)象的地址.同樣,如果定義對(duì)象pt這個(gè)類中,有一個(gè)public變量x,那么就可以用this->x=0來(lái)定義x的值,等同于pt.x=0.
C和C++經(jīng)典筆試題附答案解析篇2
1. #include using namespace std;
Void GetMemory(int *z) { *z=5; }
Int main() { int v; GetMemory(&v); cout<
Getmory把v的地址傳了過(guò)來(lái),*z是地址里的值,是v的副本.通過(guò)直接修改地址里的值,不需要有返回值,也把v給修改了,因?yàn)関所指向地址的值發(fā)生了改變,最終程序會(huì)崩潰.
2. 下面的數(shù)據(jù)聲明都代表什么意思?
(1)float(**def)[10]
Def是一個(gè)二級(jí)指針,它指向的是一個(gè)一維數(shù)組的指針,數(shù)組的元素都是float。
(2)double*(*gh)[10]
Gh是一個(gè)指針,它指向一個(gè)一維數(shù)組,該數(shù)組元素都是double*
(3) double(*f[10])()
F是一個(gè)數(shù)組,f有十個(gè)元素,元素都是函數(shù)的指針,指向的函數(shù)類型是沒有參數(shù)且返回double的函數(shù)
(4)int*((*b)[10])
就跟“int*(b)[10]”是一樣的,b是一維數(shù)組的指針
(5)long(*fun)(int)
函數(shù)指針
(6)int(*(*f)(int,int))(int)
F是一個(gè)函數(shù)的指針,指向的函數(shù)的類型是有兩個(gè)int參數(shù)并且返回一個(gè)函數(shù)指針的函數(shù),返回的函數(shù)指針指向一個(gè)int參數(shù)且返回int的函數(shù)。
3. 指針數(shù)組與數(shù)組指針
指針數(shù)組,是指一個(gè)數(shù)組里面裝著指針,數(shù)組指針,代表它是指針,指向真?zhèn)€數(shù)組
一個(gè)指向整型數(shù)組的指針定義為()
A. int(*ptr)[] B.int *ptr[] C.int*(ptr[]) D.int ptr[]
int(*ptr)[]是以一個(gè)指向整型數(shù)組的指針
int *ptr[]是指針數(shù)組,ptr[]里面存的的是地址。它指向位置的值就是*ptr[0],*ptr[1],*ptr[2],不要存*ptr[0]=5,*ptr[1]=6,因?yàn)槔锩鏇]有相應(yīng)的地址
int*(ptr[])與B相同
4. 用變量a給出下面的定義
(1)一個(gè)整型數(shù)
(2)一個(gè)指向整形數(shù)的指針
(3)一個(gè)指向指針的指針,它指向的指針是一個(gè)整型數(shù)
(4)一個(gè)有10個(gè)整型數(shù)的數(shù)組
(5)一個(gè)有10個(gè)指針的數(shù)組,該指針是指向一個(gè)整型數(shù)的
(6)一個(gè)指向有10個(gè)整型數(shù)組的指針
(7)一個(gè)指向函數(shù)的指針,該函數(shù)有一個(gè)整型參數(shù)并返回一個(gè)整型數(shù)
(8)一個(gè)有10個(gè)指針的數(shù)組,該指針指向一個(gè)函數(shù),該函數(shù)有一個(gè)整型參數(shù)并返回一個(gè)整數(shù)
Itn a; int *a; int **a; int a[10]; int *a[10]; int (*a)[10]; int (*a)(int); int (*a[10])(int)
5.C++中的空類默認(rèn)產(chǎn)生那些類成員函數(shù)?
Class Empty
{ public:
};
答案:對(duì)于一個(gè)空類,編譯器默認(rèn)產(chǎn)生4個(gè)成員函數(shù):默認(rèn)構(gòu)造函數(shù),析構(gòu)函數(shù),拷貝構(gòu)造函數(shù)和賦值函數(shù)
6.那一種成員變量可以在同一個(gè)類的實(shí)例之間共享?
答案:必須使用靜態(tài)成員變量在一個(gè)類的所有實(shí)例間共享數(shù)據(jù).如果想限制對(duì)靜態(tài)成員變量的訪問,則必須把他們聲明成保護(hù)型或私有型.不允許使用靜態(tài)成員變量去存放一個(gè)對(duì)象的數(shù)據(jù)。靜態(tài)成員數(shù)據(jù)是在這個(gè)類的所有對(duì)象間共享的。
靜態(tài)數(shù)據(jù)成員:靜態(tài)成員可以實(shí)現(xiàn)多個(gè)對(duì)象之間的數(shù)據(jù)共享,并且使用靜態(tài)數(shù)據(jù)成員還不會(huì)破壞隱藏的原則,即保證了安全性。節(jié)省內(nèi)存;提高時(shí)間效率。使用靜態(tài)數(shù)據(jù)成員可以因?yàn)樗撬袑?duì)象所公有的,因此,對(duì)多個(gè)對(duì)象來(lái)說(shuō),靜態(tài)數(shù)據(jù)成員只存儲(chǔ)一處,供所有對(duì)象共用。靜態(tài)數(shù)據(jù)成員的值對(duì)每個(gè)對(duì)象都是一樣,但它的值是可以更新的。只要對(duì)靜態(tài)數(shù)據(jù)成員的值更新一次,保證所有對(duì)象存取更新后的相同的值,
1、靜態(tài)數(shù)據(jù)成員在定義或說(shuō)明時(shí)前面加關(guān)鍵字static。
2、靜態(tài)成員初始化與一般數(shù)據(jù)成員初始化不同。靜態(tài)數(shù)據(jù)成員初始化的格式如下:
<數(shù)據(jù)類型><類名>::<靜態(tài)數(shù)據(jù)成員名>=<值>
這表明:
(1) 初始化在類體外進(jìn)行,而前面不加static,以免與一般靜態(tài)變量或?qū)ο笙嗷煜?/p>
(2) 初始化時(shí)不加該成員的訪問權(quán)限控制符private,public等。
(3) 初始化時(shí)使用作用域運(yùn)算符來(lái)標(biāo)明它所屬類,靜態(tài)數(shù)據(jù)成員是類的成員,而不是對(duì)象的成員。
3、靜態(tài)數(shù)據(jù)成員是靜態(tài)存儲(chǔ)的,它是靜態(tài)生存期,必須對(duì)它進(jìn)行初始化。
4、引用靜態(tài)數(shù)據(jù)成員時(shí),采用如下格式:
<類名>::<靜態(tài)成員名>
靜態(tài)數(shù)據(jù)成員的訪問權(quán)限允許的話(即public的成員),可在程序中,按上述格式來(lái)引用靜態(tài)數(shù)據(jù)成員。
下面舉一例子,說(shuō)明靜態(tài)數(shù)據(jù)成員的應(yīng)用:
#include
class Myclass
{
public:
Myclass(int a, int b, int c);
void GetNumber();
void GetSum();
private:
int A, B, C;
static int Sum;
};
int Myclass::Sum = 0;
Myclass::Myclass(int a, int b, int c)
{
A = a;
B = b;
C = c;
Sum += A+B+C;
}
void Myclass::GetNumber()
{
cout<<”Number=”<
}
void Myclass::GetSum()
{
cout<<”Sum=”<
}
void main()
{
Myclass M(3, 7, 10),N(14, 9, 11);
M.GetNumber();
N.GetNumber();
M.GetSum();
N.GetSum();
}
從輸出結(jié)果可以看到Sum的值對(duì)M對(duì)象和對(duì)N對(duì)象都是相等的。這是因?yàn)樵诔跏蓟疢對(duì)象時(shí),將M對(duì)象的三個(gè)int型數(shù)據(jù)成員的值求和后賦給了Sum,于是Sum保存了該值。在初始化N對(duì)象時(shí),對(duì)將N對(duì)象的三個(gè)int型數(shù)據(jù)成員的值求和后又加到Sum已有的值上,于是Sum將保存另后的值。所以,不論是通過(guò)對(duì)象M還是通過(guò)對(duì)象N來(lái)引用的值都是一樣的,即為54。
靜態(tài)成員函數(shù)
靜態(tài)成員函數(shù)和靜態(tài)數(shù)據(jù)成員一樣,它們都屬于類的靜態(tài)成員,它們都不是對(duì)象成員。因此,對(duì)靜態(tài)成員的引用不需要用對(duì)象名。
在靜態(tài)成員函數(shù)的實(shí)現(xiàn)中不能直接引用類中說(shuō)明的非靜態(tài)成員,可以引用類中說(shuō)明的靜態(tài)成員。如果靜態(tài)成員函數(shù)中要引用非靜態(tài)成員時(shí),可通過(guò)對(duì)象來(lái)引用。下面通過(guò)例子來(lái)說(shuō)明這一點(diǎn)。
#include
class M
{
public:
M(int a) { A=a; B+=a;}
static void f1(M m);
private:
int A;
static int B;
};
void M::f1(M m)
{
cout<<”A=”<
cout<<”B=”<
}
int M::B=0;
void main()
{
M P(5),Q(10);
M::f1(P); file://調(diào)用時(shí)不用對(duì)象名
M::f1(Q);
}
讀者可以自行分析其結(jié)果。從中可看出,調(diào)用靜態(tài)成員函數(shù)使用如下格式:
<類名>::<靜態(tài)成員函數(shù)名>(<參數(shù)表>);
C和C++經(jīng)典筆試題附答案解析篇3
判斷選擇
1. C++語(yǔ)言沒有可移植性。 B不正確
2. 定義數(shù)組時(shí)可以不確定元素個(gè)數(shù)。 B不正確
3. 指針是一種特殊的變量,只能用來(lái)保存地址。 A正確
4. 通過(guò)引用或者指針調(diào)用對(duì)象的成員函數(shù)時(shí),如果引用或者指針的類型跟對(duì)象的類型不一致時(shí),能自動(dòng)正確調(diào)用對(duì)象所屬的類中對(duì)這個(gè)函數(shù)的定義。 B不正確
5.類myclass,為myclass類對(duì)象以成員函數(shù)形式重載后++運(yùn)算符的聲明應(yīng)該為 C myclass operator++( int );
A. myclass operator++();
B. myclass& operator++();
C. D. myclass& operator++( int );
5. 父類和子類各自定義一個(gè)成員函數(shù),函數(shù)名相同,參數(shù)表不同,那么 C子類中的函數(shù)會(huì)覆蓋父類中的函數(shù)。 函數(shù)同名,通通覆蓋,不同層次的函數(shù)不能重載
6. 如果myclass類定義了拷貝構(gòu)造函數(shù)和一個(gè)整型參數(shù)的構(gòu)造函數(shù),還重載了賦值運(yùn)算符,那么語(yǔ)句
myclass obj = 100;會(huì) B調(diào)用整型參數(shù)的構(gòu)造函數(shù)。等價(jià)于 myclass obj = myclass(100)
7. 抽象類指的是 D有純虛函數(shù)的類
8. 多重繼承時(shí),如果派生類的兩個(gè)父類有一個(gè)共同的虛基類,那么虛基類的初始化參數(shù)由 C派生類
的構(gòu)造函數(shù)來(lái)傳遞。
9. 多態(tài)性是通過(guò) C虛函數(shù) 實(shí)現(xiàn)的。
10. 如果有如下語(yǔ)句
char str[20];
cin >> str;
cout << str;
執(zhí)行時(shí)輸入的是“this is a test line!”,則輸出的內(nèi)容是 D 。
A. this is a test line!
B. this is a test line
C. this is a test
D. this
11. 執(zhí)行語(yǔ)句
char ch[] = “Hello”;
char * p = &ch[0];
cout << p;
結(jié)果是輸出 C 。Hello
12.以下生面是否正確?
Class A{ const int size=0;};
答案:常量必須在構(gòu)造函數(shù)的初始化列表里面初始化或者將其設(shè)置為static
正確的程序如下:
Class A
{ A(){ const int size=0; }};
或者:
Class A
{ static const int size=0; };
ss3是一個(gè)字符數(shù)組,這個(gè)數(shù)組開始預(yù)分配100,所以它的大小是100位。
ss4是一個(gè)整型數(shù)組,但是每個(gè)整型變量所占空間是4,所以它的大小一共是400位。
q1與ss2類似,占4位。Q2里面有一個(gè)“\n”,“\n”算作一位,加上隱含的,大小一共是3位。Q3是一個(gè)字符指針,指針得大小是一個(gè)定值,就是4.
4. What is the output of the following code?
#include
using namespace std;
class A {};
class A2 {char d,e;};
struct B{};
struct C{ char x,y;};
struct D{int x,y;};
main()
{
cout<
cout<
A *p1=new A();
A p2;
A*p3;
cout<
cout<
cout<
cout<
cout<
cout<
return 0;
}
答案:對(duì)于一個(gè)類而言,即便它是一個(gè)空的類,編譯器仍然要要給它一個(gè)空間,所以類A即便什么也沒有,它的空間大小依然為1,而類A2大小是類中連個(gè)字符d,e之和,所以它的空間大小依然是2,至于p1,p2,p3,p1和p3是指針,大小是一致的,而且是定值,為4,p2是A的對(duì)象,所以它的大小和類A相等,為1,B和C得解釋同A和A2,至于D,它和C不同點(diǎn)在于,結(jié)構(gòu)體有兩個(gè)整型變量,每個(gè)整型變量所占空間為4,所以D所占空間大小為8。
最后結(jié)果是 1, 2,4, 1,4,1,2,8
5. what is the output the following code?
#include using namespace std;
class A1 { public: int a; static int b;A1(); ~A1();}; 4
class A2 { public: int a; char c; A2(); ~A2();}; 8
class A3 { public: float a; char c; A3(); ~A3();}; 8
class A4 { public: float a; int b; char c; A4(); ~A4();}; 12
class A5 { public: double d; float a; int b; char c; A5(); ~A5();} 24
int main() { cout<
答案:因?yàn)殪o態(tài)變量是存放在全局?jǐn)?shù)據(jù)區(qū)的,sizeof計(jì)算棧中分配的大小,是不會(huì)計(jì)算在內(nèi)的,所以sizeof(A1)是4;為了照顧數(shù)據(jù)對(duì)其,int大小為4,char大小為1,所以sizeof(A2)是8;為了照顧數(shù)據(jù)對(duì)其,float大小為4,char大小為1,所以sizeof(A3)為8;為了照顧數(shù)據(jù)對(duì)其,float大小為4,int大小為4,char大小為1,所以sizeof(A4)為12;為了照顧數(shù)據(jù)對(duì)其,double大小為8,float大小為4,int大小為4,char大小為1,所以sizeof(A5)為24。
6. 以下代碼的輸出結(jié)果是()
char var[]
Int test(char var[]){ retrun sizeof(var);}
答案:因?yàn)関ar[]等價(jià)于*var,已經(jīng)退化成一個(gè)指針了,所以大小是4.
7. 以下代碼的輸出結(jié)果是()
Class B { float f; char p; int asf[3];}; cout<
答案:float f占了4個(gè)字節(jié),char p占了一個(gè)字節(jié),int adf[3]占了12個(gè)字節(jié),總共是17個(gè),根據(jù)內(nèi)存的對(duì)齊原則,要選擇4的倍數(shù),是20個(gè)字節(jié)。
8. 以下代碼的輸出結(jié)果是()
Class B { double d; char p; int asf[4];}; cout<
答案:double d占了8個(gè)字節(jié),char p占了一個(gè)字節(jié),int adf[4]占了16個(gè)字節(jié),總共是25個(gè),根據(jù)內(nèi)存的對(duì)齊原則,要選擇8的倍數(shù),是32個(gè)字節(jié)。
9. 一個(gè)空類所占空間為1,多重繼承的空類所占的空間還是1,但是虛繼承涉及到虛表(虛指針),所以虛繼承的空類占的空間為4
10. this指針是在實(shí)例化一個(gè)對(duì)象后產(chǎn)生的,并且指向?qū)ο蟊旧?比如實(shí)例化一個(gè)對(duì)象pt,那么this=&pt;用”&”取地址符來(lái)取對(duì)象的地址.同樣,如果定義對(duì)象pt這個(gè)類中,有一個(gè)public變量x,那么就可以用this->x=0來(lái)定義x的值,等同于pt.x=0.
C和C++經(jīng)典筆試題附答案解析篇2
1. #include using namespace std;
Void GetMemory(int *z) { *z=5; }
Int main() { int v; GetMemory(&v); cout<
Getmory把v的地址傳了過(guò)來(lái),*z是地址里的值,是v的副本.通過(guò)直接修改地址里的值,不需要有返回值,也把v給修改了,因?yàn)関所指向地址的值發(fā)生了改變,最終程序會(huì)崩潰.
2. 下面的數(shù)據(jù)聲明都代表什么意思?
(1)float(**def)[10]
Def是一個(gè)二級(jí)指針,它指向的是一個(gè)一維數(shù)組的指針,數(shù)組的元素都是float。
(2)double*(*gh)[10]
Gh是一個(gè)指針,它指向一個(gè)一維數(shù)組,該數(shù)組元素都是double*
(3) double(*f[10])()
F是一個(gè)數(shù)組,f有十個(gè)元素,元素都是函數(shù)的指針,指向的函數(shù)類型是沒有參數(shù)且返回double的函數(shù)
(4)int*((*b)[10])
就跟“int*(b)[10]”是一樣的,b是一維數(shù)組的指針
(5)long(*fun)(int)
函數(shù)指針
(6)int(*(*f)(int,int))(int)
F是一個(gè)函數(shù)的指針,指向的函數(shù)的類型是有兩個(gè)int參數(shù)并且返回一個(gè)函數(shù)指針的函數(shù),返回的函數(shù)指針指向一個(gè)int參數(shù)且返回int的函數(shù)。
3. 指針數(shù)組與數(shù)組指針
指針數(shù)組,是指一個(gè)數(shù)組里面裝著指針,數(shù)組指針,代表它是指針,指向真?zhèn)€數(shù)組
一個(gè)指向整型數(shù)組的指針定義為()
A. int(*ptr)[] B.int *ptr[] C.int*(ptr[]) D.int ptr[]
int(*ptr)[]是以一個(gè)指向整型數(shù)組的指針
int *ptr[]是指針數(shù)組,ptr[]里面存的的是地址。它指向位置的值就是*ptr[0],*ptr[1],*ptr[2],不要存*ptr[0]=5,*ptr[1]=6,因?yàn)槔锩鏇]有相應(yīng)的地址
int*(ptr[])與B相同
4. 用變量a給出下面的定義
(1)一個(gè)整型數(shù)
(2)一個(gè)指向整形數(shù)的指針
(3)一個(gè)指向指針的指針,它指向的指針是一個(gè)整型數(shù)
(4)一個(gè)有10個(gè)整型數(shù)的數(shù)組
(5)一個(gè)有10個(gè)指針的數(shù)組,該指針是指向一個(gè)整型數(shù)的
(6)一個(gè)指向有10個(gè)整型數(shù)組的指針
(7)一個(gè)指向函數(shù)的指針,該函數(shù)有一個(gè)整型參數(shù)并返回一個(gè)整型數(shù)
(8)一個(gè)有10個(gè)指針的數(shù)組,該指針指向一個(gè)函數(shù),該函數(shù)有一個(gè)整型參數(shù)并返回一個(gè)整數(shù)
Itn a; int *a; int **a; int a[10]; int *a[10]; int (*a)[10]; int (*a)(int); int (*a[10])(int)
5.C++中的空類默認(rèn)產(chǎn)生那些類成員函數(shù)?
Class Empty
{ public:
};
答案:對(duì)于一個(gè)空類,編譯器默認(rèn)產(chǎn)生4個(gè)成員函數(shù):默認(rèn)構(gòu)造函數(shù),析構(gòu)函數(shù),拷貝構(gòu)造函數(shù)和賦值函數(shù)
6.那一種成員變量可以在同一個(gè)類的實(shí)例之間共享?
答案:必須使用靜態(tài)成員變量在一個(gè)類的所有實(shí)例間共享數(shù)據(jù).如果想限制對(duì)靜態(tài)成員變量的訪問,則必須把他們聲明成保護(hù)型或私有型.不允許使用靜態(tài)成員變量去存放一個(gè)對(duì)象的數(shù)據(jù)。靜態(tài)成員數(shù)據(jù)是在這個(gè)類的所有對(duì)象間共享的。
靜態(tài)數(shù)據(jù)成員:靜態(tài)成員可以實(shí)現(xiàn)多個(gè)對(duì)象之間的數(shù)據(jù)共享,并且使用靜態(tài)數(shù)據(jù)成員還不會(huì)破壞隱藏的原則,即保證了安全性。節(jié)省內(nèi)存;提高時(shí)間效率。使用靜態(tài)數(shù)據(jù)成員可以因?yàn)樗撬袑?duì)象所公有的,因此,對(duì)多個(gè)對(duì)象來(lái)說(shuō),靜態(tài)數(shù)據(jù)成員只存儲(chǔ)一處,供所有對(duì)象共用。靜態(tài)數(shù)據(jù)成員的值對(duì)每個(gè)對(duì)象都是一樣,但它的值是可以更新的。只要對(duì)靜態(tài)數(shù)據(jù)成員的值更新一次,保證所有對(duì)象存取更新后的相同的值,
1、靜態(tài)數(shù)據(jù)成員在定義或說(shuō)明時(shí)前面加關(guān)鍵字static。
2、靜態(tài)成員初始化與一般數(shù)據(jù)成員初始化不同。靜態(tài)數(shù)據(jù)成員初始化的格式如下:
<數(shù)據(jù)類型><類名>::<靜態(tài)數(shù)據(jù)成員名>=<值>
這表明:
(1) 初始化在類體外進(jìn)行,而前面不加static,以免與一般靜態(tài)變量或?qū)ο笙嗷煜?/p>
(2) 初始化時(shí)不加該成員的訪問權(quán)限控制符private,public等。
(3) 初始化時(shí)使用作用域運(yùn)算符來(lái)標(biāo)明它所屬類,靜態(tài)數(shù)據(jù)成員是類的成員,而不是對(duì)象的成員。
3、靜態(tài)數(shù)據(jù)成員是靜態(tài)存儲(chǔ)的,它是靜態(tài)生存期,必須對(duì)它進(jìn)行初始化。
4、引用靜態(tài)數(shù)據(jù)成員時(shí),采用如下格式:
<類名>::<靜態(tài)成員名>
靜態(tài)數(shù)據(jù)成員的訪問權(quán)限允許的話(即public的成員),可在程序中,按上述格式來(lái)引用靜態(tài)數(shù)據(jù)成員。
下面舉一例子,說(shuō)明靜態(tài)數(shù)據(jù)成員的應(yīng)用:
#include
class Myclass
{
public:
Myclass(int a, int b, int c);
void GetNumber();
void GetSum();
private:
int A, B, C;
static int Sum;
};
int Myclass::Sum = 0;
Myclass::Myclass(int a, int b, int c)
{
A = a;
B = b;
C = c;
Sum += A+B+C;
}
void Myclass::GetNumber()
{
cout<<”Number=”<
}
void Myclass::GetSum()
{
cout<<”Sum=”<
}
void main()
{
Myclass M(3, 7, 10),N(14, 9, 11);
M.GetNumber();
N.GetNumber();
M.GetSum();
N.GetSum();
}
從輸出結(jié)果可以看到Sum的值對(duì)M對(duì)象和對(duì)N對(duì)象都是相等的。這是因?yàn)樵诔跏蓟疢對(duì)象時(shí),將M對(duì)象的三個(gè)int型數(shù)據(jù)成員的值求和后賦給了Sum,于是Sum保存了該值。在初始化N對(duì)象時(shí),對(duì)將N對(duì)象的三個(gè)int型數(shù)據(jù)成員的值求和后又加到Sum已有的值上,于是Sum將保存另后的值。所以,不論是通過(guò)對(duì)象M還是通過(guò)對(duì)象N來(lái)引用的值都是一樣的,即為54。
靜態(tài)成員函數(shù)
靜態(tài)成員函數(shù)和靜態(tài)數(shù)據(jù)成員一樣,它們都屬于類的靜態(tài)成員,它們都不是對(duì)象成員。因此,對(duì)靜態(tài)成員的引用不需要用對(duì)象名。
在靜態(tài)成員函數(shù)的實(shí)現(xiàn)中不能直接引用類中說(shuō)明的非靜態(tài)成員,可以引用類中說(shuō)明的靜態(tài)成員。如果靜態(tài)成員函數(shù)中要引用非靜態(tài)成員時(shí),可通過(guò)對(duì)象來(lái)引用。下面通過(guò)例子來(lái)說(shuō)明這一點(diǎn)。
#include
class M
{
public:
M(int a) { A=a; B+=a;}
static void f1(M m);
private:
int A;
static int B;
};
void M::f1(M m)
{
cout<<”A=”<
cout<<”B=”<
}
int M::B=0;
void main()
{
M P(5),Q(10);
M::f1(P); file://調(diào)用時(shí)不用對(duì)象名
M::f1(Q);
}
讀者可以自行分析其結(jié)果。從中可看出,調(diào)用靜態(tài)成員函數(shù)使用如下格式:
<類名>::<靜態(tài)成員函數(shù)名>(<參數(shù)表>);
C和C++經(jīng)典筆試題附答案解析篇3
判斷選擇
1. C++語(yǔ)言沒有可移植性。 B不正確
2. 定義數(shù)組時(shí)可以不確定元素個(gè)數(shù)。 B不正確
3. 指針是一種特殊的變量,只能用來(lái)保存地址。 A正確
4. 通過(guò)引用或者指針調(diào)用對(duì)象的成員函數(shù)時(shí),如果引用或者指針的類型跟對(duì)象的類型不一致時(shí),能自動(dòng)正確調(diào)用對(duì)象所屬的類中對(duì)這個(gè)函數(shù)的定義。 B不正確
5.類myclass,為myclass類對(duì)象以成員函數(shù)形式重載后++運(yùn)算符的聲明應(yīng)該為 C myclass operator++( int );
A. myclass operator++();
B. myclass& operator++();
C. D. myclass& operator++( int );
5. 父類和子類各自定義一個(gè)成員函數(shù),函數(shù)名相同,參數(shù)表不同,那么 C子類中的函數(shù)會(huì)覆蓋父類中的函數(shù)。 函數(shù)同名,通通覆蓋,不同層次的函數(shù)不能重載
6. 如果myclass類定義了拷貝構(gòu)造函數(shù)和一個(gè)整型參數(shù)的構(gòu)造函數(shù),還重載了賦值運(yùn)算符,那么語(yǔ)句
myclass obj = 100;會(huì) B調(diào)用整型參數(shù)的構(gòu)造函數(shù)。等價(jià)于 myclass obj = myclass(100)
7. 抽象類指的是 D有純虛函數(shù)的類
8. 多重繼承時(shí),如果派生類的兩個(gè)父類有一個(gè)共同的虛基類,那么虛基類的初始化參數(shù)由 C派生類
的構(gòu)造函數(shù)來(lái)傳遞。
9. 多態(tài)性是通過(guò) C虛函數(shù) 實(shí)現(xiàn)的。
10. 如果有如下語(yǔ)句
char str[20];
cin >> str;
cout << str;
執(zhí)行時(shí)輸入的是“this is a test line!”,則輸出的內(nèi)容是 D 。
A. this is a test line!
B. this is a test line
C. this is a test
D. this
11. 執(zhí)行語(yǔ)句
char ch[] = “Hello”;
char * p = &ch[0];
cout << p;
結(jié)果是輸出 C 。Hello
12.以下生面是否正確?
Class A{ const int size=0;};
答案:常量必須在構(gòu)造函數(shù)的初始化列表里面初始化或者將其設(shè)置為static
正確的程序如下:
Class A
{ A(){ const int size=0; }};
或者:
Class A
{ static const int size=0; };