不卡AV在线|网页在线观看无码高清|亚洲国产亚洲国产|国产伦精品一区二区三区免费视频

學習啦 > 創(chuàng)業(yè)指南 > 職場 > 筆試題 > C和C++經(jīng)典筆試題附答案解析

C和C++經(jīng)典筆試題附答案解析

時間: 護托1061 分享

C和C++經(jīng)典筆試題附答案解析

  C語言是一門通用計算機編程語言,應用廣泛。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產(chǎn)生少量的機器碼以及不需要任何運行環(huán)境支持便能運行的編程語言。下面就由學習啦小編為大家介紹一下C和C++經(jīng)典筆試題附答案解析的文章,歡迎閱讀。

  C和C++經(jīng)典筆試題附答案解析篇1

  1. 用預處理指令#define聲明一個常數(shù),用以表明1年中有多少秒(忽略閏年問題)。

  答案:#define SECONDS_PER_YEAR(60*60*24*365)UL

  應該意識到表達式將使一個16位機的整形數(shù)溢出,因此要用到長整型符號L,表達式中UL表示無符號長整型。

  2. 寫一個“標準”宏MIN,這個宏輸入連個參數(shù)并返回較小的一個。

  答案:#define MIN(A,B) ((A)<=(B)?(A):(B));懂得在宏中小心的吧參數(shù)用括號擴起來

  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是一個字符指針,指針的大小是一個確定的值,就是4,sizeof(ss1)=4;

  ss2是一個字符數(shù)組,這個數(shù)組最初的大小未定,填充值是“0123456789”,一個字符占一位,再加上隱含的“

學習啦 > 創(chuàng)業(yè)指南 > 職場 > 筆試題 > C和C++經(jīng)典筆試題附答案解析

C和C++經(jīng)典筆試題附答案解析

時間: 護托1061 分享

C和C++經(jīng)典筆試題附答案解析

  C語言是一門通用計算機編程語言,應用廣泛。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產(chǎn)生少量的機器碼以及不需要任何運行環(huán)境支持便能運行的編程語言。下面就由學習啦小編為大家介紹一下C和C++經(jīng)典筆試題附答案解析的文章,歡迎閱讀。

  C和C++經(jīng)典筆試題附答案解析篇1

  1. 用預處理指令#define聲明一個常數(shù),用以表明1年中有多少秒(忽略閏年問題)。

  答案:#define SECONDS_PER_YEAR(60*60*24*365)UL

  應該意識到表達式將使一個16位機的整形數(shù)溢出,因此要用到長整型符號L,表達式中UL表示無符號長整型。

  2. 寫一個“標準”宏MIN,這個宏輸入連個參數(shù)并返回較小的一個。

  答案:#define MIN(A,B) ((A)<=(B)?(A):(B));懂得在宏中小心的吧參數(shù)用括號擴起來

  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是一個字符指針,指針的大小是一個確定的值,就是4,sizeof(ss1)=4;

  ss2是一個字符數(shù)組,這個數(shù)組最初的大小未定,填充值是“0123456789”,一個字符占一位,再加上隱含的“\0”一共是11位。

  ss3是一個字符數(shù)組,這個數(shù)組開始預分配100,所以它的大小是100位。

  ss4是一個整型數(shù)組,但是每個整型變量所占空間是4,所以它的大小一共是400位。

  q1與ss2類似,占4位。Q2里面有一個“\n”,“\n”算作一位,加上隱含的,大小一共是3位。Q3是一個字符指針,指針得大小是一個定值,就是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;

  }

  答案:對于一個類而言,即便它是一個空的類,編譯器仍然要要給它一個空間,所以類A即便什么也沒有,它的空間大小依然為1,而類A2大小是類中連個字符d,e之和,所以它的空間大小依然是2,至于p1,p2,p3,p1和p3是指針,大小是一致的,而且是定值,為4,p2是A的對象,所以它的大小和類A相等,為1,B和C得解釋同A和A2,至于D,它和C不同點在于,結(jié)構體有兩個整型變量,每個整型變量所占空間為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<

  答案:因為靜態(tài)變量是存放在全局數(shù)據(jù)區(qū)的,sizeof計算棧中分配的大小,是不會計算在內(nèi)的,所以sizeof(A1)是4;為了照顧數(shù)據(jù)對其,int大小為4,char大小為1,所以sizeof(A2)是8;為了照顧數(shù)據(jù)對其,float大小為4,char大小為1,所以sizeof(A3)為8;為了照顧數(shù)據(jù)對其,float大小為4,int大小為4,char大小為1,所以sizeof(A4)為12;為了照顧數(shù)據(jù)對其,double大小為8,float大小為4,int大小為4,char大小為1,所以sizeof(A5)為24。

  6. 以下代碼的輸出結(jié)果是()

  char var[]

  Int test(char var[]){ retrun sizeof(var);}

  答案:因為var[]等價于*var,已經(jīng)退化成一個指針了,所以大小是4.

  7. 以下代碼的輸出結(jié)果是()

  Class B { float f; char p; int asf[3];}; cout<

  答案:float f占了4個字節(jié),char p占了一個字節(jié),int adf[3]占了12個字節(jié),總共是17個,根據(jù)內(nèi)存的對齊原則,要選擇4的倍數(shù),是20個字節(jié)。

  8. 以下代碼的輸出結(jié)果是()

  Class B { double d; char p; int asf[4];}; cout<

  答案:double d占了8個字節(jié),char p占了一個字節(jié),int adf[4]占了16個字節(jié),總共是25個,根據(jù)內(nèi)存的對齊原則,要選擇8的倍數(shù),是32個字節(jié)。

  9. 一個空類所占空間為1,多重繼承的空類所占的空間還是1,但是虛繼承涉及到虛表(虛指針),所以虛繼承的空類占的空間為4

  10. this指針是在實例化一個對象后產(chǎn)生的,并且指向?qū)ο蟊旧?比如實例化一個對象pt,那么this=&pt;用”&”取地址符來取對象的地址.同樣,如果定義對象pt這個類中,有一個public變量x,那么就可以用this->x=0來定義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的地址傳了過來,*z是地址里的值,是v的副本.通過直接修改地址里的值,不需要有返回值,也把v給修改了,因為v所指向地址的值發(fā)生了改變,最終程序會崩潰.

  2. 下面的數(shù)據(jù)聲明都代表什么意思?

  (1)float(**def)[10]

  Def是一個二級指針,它指向的是一個一維數(shù)組的指針,數(shù)組的元素都是float。

  (2)double*(*gh)[10]

  Gh是一個指針,它指向一個一維數(shù)組,該數(shù)組元素都是double*

  (3) double(*f[10])()

  F是一個數(shù)組,f有十個元素,元素都是函數(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是一個函數(shù)的指針,指向的函數(shù)的類型是有兩個int參數(shù)并且返回一個函數(shù)指針的函數(shù),返回的函數(shù)指針指向一個int參數(shù)且返回int的函數(shù)。

  3. 指針數(shù)組與數(shù)組指針

  指針數(shù)組,是指一個數(shù)組里面裝著指針,數(shù)組指針,代表它是指針,指向真?zhèn)€數(shù)組

  一個指向整型數(shù)組的指針定義為()

  A. int(*ptr)[] B.int *ptr[] C.int*(ptr[]) D.int ptr[]

  int(*ptr)[]是以一個指向整型數(shù)組的指針

  int *ptr[]是指針數(shù)組,ptr[]里面存的的是地址。它指向位置的值就是*ptr[0],*ptr[1],*ptr[2],不要存*ptr[0]=5,*ptr[1]=6,因為里面沒有相應的地址

  int*(ptr[])與B相同

  4. 用變量a給出下面的定義

  (1)一個整型數(shù)

  (2)一個指向整形數(shù)的指針

  (3)一個指向指針的指針,它指向的指針是一個整型數(shù)

  (4)一個有10個整型數(shù)的數(shù)組

  (5)一個有10個指針的數(shù)組,該指針是指向一個整型數(shù)的

  (6)一個指向有10個整型數(shù)組的指針

  (7)一個指向函數(shù)的指針,該函數(shù)有一個整型參數(shù)并返回一個整型數(shù)

  (8)一個有10個指針的數(shù)組,該指針指向一個函數(shù),該函數(shù)有一個整型參數(shù)并返回一個整數(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++中的空類默認產(chǎn)生那些類成員函數(shù)?

  Class Empty

  { public:

  };

  答案:對于一個空類,編譯器默認產(chǎn)生4個成員函數(shù):默認構造函數(shù),析構函數(shù),拷貝構造函數(shù)和賦值函數(shù)

  6.那一種成員變量可以在同一個類的實例之間共享?

  答案:必須使用靜態(tài)成員變量在一個類的所有實例間共享數(shù)據(jù).如果想限制對靜態(tài)成員變量的訪問,則必須把他們聲明成保護型或私有型.不允許使用靜態(tài)成員變量去存放一個對象的數(shù)據(jù)。靜態(tài)成員數(shù)據(jù)是在這個類的所有對象間共享的。

  靜態(tài)數(shù)據(jù)成員:靜態(tài)成員可以實現(xiàn)多個對象之間的數(shù)據(jù)共享,并且使用靜態(tài)數(shù)據(jù)成員還不會破壞隱藏的原則,即保證了安全性。節(jié)省內(nèi)存;提高時間效率。使用靜態(tài)數(shù)據(jù)成員可以因為它是所有對象所公有的,因此,對多個對象來說,靜態(tài)數(shù)據(jù)成員只存儲一處,供所有對象共用。靜態(tài)數(shù)據(jù)成員的值對每個對象都是一樣,但它的值是可以更新的。只要對靜態(tài)數(shù)據(jù)成員的值更新一次,保證所有對象存取更新后的相同的值,

  1、靜態(tài)數(shù)據(jù)成員在定義或說明時前面加關鍵字static。

  2、靜態(tài)成員初始化與一般數(shù)據(jù)成員初始化不同。靜態(tài)數(shù)據(jù)成員初始化的格式如下:

  <數(shù)據(jù)類型><類名>::<靜態(tài)數(shù)據(jù)成員名>=<值>

  這表明:

  (1) 初始化在類體外進行,而前面不加static,以免與一般靜態(tài)變量或?qū)ο笙嗷煜?/p>

  (2) 初始化時不加該成員的訪問權限控制符private,public等。

  (3) 初始化時使用作用域運算符來標明它所屬類,靜態(tài)數(shù)據(jù)成員是類的成員,而不是對象的成員。

  3、靜態(tài)數(shù)據(jù)成員是靜態(tài)存儲的,它是靜態(tài)生存期,必須對它進行初始化。

  4、引用靜態(tài)數(shù)據(jù)成員時,采用如下格式:

  <類名>::<靜態(tài)成員名>

  靜態(tài)數(shù)據(jù)成員的訪問權限允許的話(即public的成員),可在程序中,按上述格式來引用靜態(tài)數(shù)據(jù)成員。

  下面舉一例子,說明靜態(tài)數(shù)據(jù)成員的應用:

  #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的值對M對象和對N對象都是相等的。這是因為在初始化M對象時,將M對象的三個int型數(shù)據(jù)成員的值求和后賦給了Sum,于是Sum保存了該值。在初始化N對象時,對將N對象的三個int型數(shù)據(jù)成員的值求和后又加到Sum已有的值上,于是Sum將保存另后的值。所以,不論是通過對象M還是通過對象N來引用的值都是一樣的,即為54。

  靜態(tài)成員函數(shù)

  靜態(tài)成員函數(shù)和靜態(tài)數(shù)據(jù)成員一樣,它們都屬于類的靜態(tài)成員,它們都不是對象成員。因此,對靜態(tài)成員的引用不需要用對象名。

  在靜態(tài)成員函數(shù)的實現(xiàn)中不能直接引用類中說明的非靜態(tài)成員,可以引用類中說明的靜態(tài)成員。如果靜態(tài)成員函數(shù)中要引用非靜態(tài)成員時,可通過對象來引用。下面通過例子來說明這一點。

  #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)用時不用對象名

  M::f1(Q);

  }

  讀者可以自行分析其結(jié)果。從中可看出,調(diào)用靜態(tài)成員函數(shù)使用如下格式:

  <類名>::<靜態(tài)成員函數(shù)名>(<參數(shù)表>);

  C和C++經(jīng)典筆試題附答案解析篇3

  判斷選擇

  1. C++語言沒有可移植性。 B不正確

  2. 定義數(shù)組時可以不確定元素個數(shù)。 B不正確

  3. 指針是一種特殊的變量,只能用來保存地址。 A正確

  4. 通過引用或者指針調(diào)用對象的成員函數(shù)時,如果引用或者指針的類型跟對象的類型不一致時,能自動正確調(diào)用對象所屬的類中對這個函數(shù)的定義。 B不正確

  5.類myclass,為myclass類對象以成員函數(shù)形式重載后++運算符的聲明應該為 C myclass operator++( int );

  A. myclass operator++();

  B. myclass& operator++();

  C. D. myclass& operator++( int );

  5. 父類和子類各自定義一個成員函數(shù),函數(shù)名相同,參數(shù)表不同,那么 C子類中的函數(shù)會覆蓋父類中的函數(shù)。 函數(shù)同名,通通覆蓋,不同層次的函數(shù)不能重載

  6. 如果myclass類定義了拷貝構造函數(shù)和一個整型參數(shù)的構造函數(shù),還重載了賦值運算符,那么語句

  myclass obj = 100;會 B調(diào)用整型參數(shù)的構造函數(shù)。等價于 myclass obj = myclass(100)

  7. 抽象類指的是 D有純虛函數(shù)的類

  8. 多重繼承時,如果派生類的兩個父類有一個共同的虛基類,那么虛基類的初始化參數(shù)由 C派生類

  的構造函數(shù)來傳遞。

  9. 多態(tài)性是通過 C虛函數(shù) 實現(xiàn)的。

  10. 如果有如下語句

  char str[20];

  cin >> str;

  cout << str;

  執(zhí)行時輸入的是“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í)行語句

  char ch[] = “Hello”;

  char * p = &ch[0];

  cout << p;

  結(jié)果是輸出 C 。Hello

  12.以下生面是否正確?

  Class A{ const int size=0;};

  答案:常量必須在構造函數(shù)的初始化列表里面初始化或者將其設置為static

  正確的程序如下:

  Class A

  { A(){ const int size=0; }};

  或者:

  Class A

  { static const int size=0; };

”一共是11位。

  ss3是一個字符數(shù)組,這個數(shù)組開始預分配100,所以它的大小是100位。

  ss4是一個整型數(shù)組,但是每個整型變量所占空間是4,所以它的大小一共是400位。

  q1與ss2類似,占4位。Q2里面有一個“\n”,“\n”算作一位,加上隱含的,大小一共是3位。Q3是一個字符指針,指針得大小是一個定值,就是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;

  }

  答案:對于一個類而言,即便它是一個空的類,編譯器仍然要要給它一個空間,所以類A即便什么也沒有,它的空間大小依然為1,而類A2大小是類中連個字符d,e之和,所以它的空間大小依然是2,至于p1,p2,p3,p1和p3是指針,大小是一致的,而且是定值,為4,p2是A的對象,所以它的大小和類A相等,為1,B和C得解釋同A和A2,至于D,它和C不同點在于,結(jié)構體有兩個整型變量,每個整型變量所占空間為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<

  答案:因為靜態(tài)變量是存放在全局數(shù)據(jù)區(qū)的,sizeof計算棧中分配的大小,是不會計算在內(nèi)的,所以sizeof(A1)是4;為了照顧數(shù)據(jù)對其,int大小為4,char大小為1,所以sizeof(A2)是8;為了照顧數(shù)據(jù)對其,float大小為4,char大小為1,所以sizeof(A3)為8;為了照顧數(shù)據(jù)對其,float大小為4,int大小為4,char大小為1,所以sizeof(A4)為12;為了照顧數(shù)據(jù)對其,double大小為8,float大小為4,int大小為4,char大小為1,所以sizeof(A5)為24。

  6. 以下代碼的輸出結(jié)果是()

  char var[]

  Int test(char var[]){ retrun sizeof(var);}

  答案:因為var[]等價于*var,已經(jīng)退化成一個指針了,所以大小是4.

  7. 以下代碼的輸出結(jié)果是()

  Class B { float f; char p; int asf[3];}; cout<

  答案:float f占了4個字節(jié),char p占了一個字節(jié),int adf[3]占了12個字節(jié),總共是17個,根據(jù)內(nèi)存的對齊原則,要選擇4的倍數(shù),是20個字節(jié)。

  8. 以下代碼的輸出結(jié)果是()

  Class B { double d; char p; int asf[4];}; cout<

  答案:double d占了8個字節(jié),char p占了一個字節(jié),int adf[4]占了16個字節(jié),總共是25個,根據(jù)內(nèi)存的對齊原則,要選擇8的倍數(shù),是32個字節(jié)。

  9. 一個空類所占空間為1,多重繼承的空類所占的空間還是1,但是虛繼承涉及到虛表(虛指針),所以虛繼承的空類占的空間為4

  10. this指針是在實例化一個對象后產(chǎn)生的,并且指向?qū)ο蟊旧?比如實例化一個對象pt,那么this=&pt;用”&”取地址符來取對象的地址.同樣,如果定義對象pt這個類中,有一個public變量x,那么就可以用this->x=0來定義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的地址傳了過來,*z是地址里的值,是v的副本.通過直接修改地址里的值,不需要有返回值,也把v給修改了,因為v所指向地址的值發(fā)生了改變,最終程序會崩潰.

  2. 下面的數(shù)據(jù)聲明都代表什么意思?

  (1)float(**def)[10]

  Def是一個二級指針,它指向的是一個一維數(shù)組的指針,數(shù)組的元素都是float。

  (2)double*(*gh)[10]

  Gh是一個指針,它指向一個一維數(shù)組,該數(shù)組元素都是double*

  (3) double(*f[10])()

  F是一個數(shù)組,f有十個元素,元素都是函數(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是一個函數(shù)的指針,指向的函數(shù)的類型是有兩個int參數(shù)并且返回一個函數(shù)指針的函數(shù),返回的函數(shù)指針指向一個int參數(shù)且返回int的函數(shù)。

  3. 指針數(shù)組與數(shù)組指針

  指針數(shù)組,是指一個數(shù)組里面裝著指針,數(shù)組指針,代表它是指針,指向真?zhèn)€數(shù)組

  一個指向整型數(shù)組的指針定義為()

  A. int(*ptr)[] B.int *ptr[] C.int*(ptr[]) D.int ptr[]

  int(*ptr)[]是以一個指向整型數(shù)組的指針

  int *ptr[]是指針數(shù)組,ptr[]里面存的的是地址。它指向位置的值就是*ptr[0],*ptr[1],*ptr[2],不要存*ptr[0]=5,*ptr[1]=6,因為里面沒有相應的地址

  int*(ptr[])與B相同

  4. 用變量a給出下面的定義

  (1)一個整型數(shù)

  (2)一個指向整形數(shù)的指針

  (3)一個指向指針的指針,它指向的指針是一個整型數(shù)

  (4)一個有10個整型數(shù)的數(shù)組

  (5)一個有10個指針的數(shù)組,該指針是指向一個整型數(shù)的

  (6)一個指向有10個整型數(shù)組的指針

  (7)一個指向函數(shù)的指針,該函數(shù)有一個整型參數(shù)并返回一個整型數(shù)

  (8)一個有10個指針的數(shù)組,該指針指向一個函數(shù),該函數(shù)有一個整型參數(shù)并返回一個整數(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++中的空類默認產(chǎn)生那些類成員函數(shù)?

  Class Empty

  { public:

  };

  答案:對于一個空類,編譯器默認產(chǎn)生4個成員函數(shù):默認構造函數(shù),析構函數(shù),拷貝構造函數(shù)和賦值函數(shù)

  6.那一種成員變量可以在同一個類的實例之間共享?

  答案:必須使用靜態(tài)成員變量在一個類的所有實例間共享數(shù)據(jù).如果想限制對靜態(tài)成員變量的訪問,則必須把他們聲明成保護型或私有型.不允許使用靜態(tài)成員變量去存放一個對象的數(shù)據(jù)。靜態(tài)成員數(shù)據(jù)是在這個類的所有對象間共享的。

  靜態(tài)數(shù)據(jù)成員:靜態(tài)成員可以實現(xiàn)多個對象之間的數(shù)據(jù)共享,并且使用靜態(tài)數(shù)據(jù)成員還不會破壞隱藏的原則,即保證了安全性。節(jié)省內(nèi)存;提高時間效率。使用靜態(tài)數(shù)據(jù)成員可以因為它是所有對象所公有的,因此,對多個對象來說,靜態(tài)數(shù)據(jù)成員只存儲一處,供所有對象共用。靜態(tài)數(shù)據(jù)成員的值對每個對象都是一樣,但它的值是可以更新的。只要對靜態(tài)數(shù)據(jù)成員的值更新一次,保證所有對象存取更新后的相同的值,

  1、靜態(tài)數(shù)據(jù)成員在定義或說明時前面加關鍵字static。

  2、靜態(tài)成員初始化與一般數(shù)據(jù)成員初始化不同。靜態(tài)數(shù)據(jù)成員初始化的格式如下:

  <數(shù)據(jù)類型><類名>::<靜態(tài)數(shù)據(jù)成員名>=<值>

  這表明:

  (1) 初始化在類體外進行,而前面不加static,以免與一般靜態(tài)變量或?qū)ο笙嗷煜?/p>

  (2) 初始化時不加該成員的訪問權限控制符private,public等。

  (3) 初始化時使用作用域運算符來標明它所屬類,靜態(tài)數(shù)據(jù)成員是類的成員,而不是對象的成員。

  3、靜態(tài)數(shù)據(jù)成員是靜態(tài)存儲的,它是靜態(tài)生存期,必須對它進行初始化。

  4、引用靜態(tài)數(shù)據(jù)成員時,采用如下格式:

  <類名>::<靜態(tài)成員名>

  靜態(tài)數(shù)據(jù)成員的訪問權限允許的話(即public的成員),可在程序中,按上述格式來引用靜態(tài)數(shù)據(jù)成員。

  下面舉一例子,說明靜態(tài)數(shù)據(jù)成員的應用:

  #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的值對M對象和對N對象都是相等的。這是因為在初始化M對象時,將M對象的三個int型數(shù)據(jù)成員的值求和后賦給了Sum,于是Sum保存了該值。在初始化N對象時,對將N對象的三個int型數(shù)據(jù)成員的值求和后又加到Sum已有的值上,于是Sum將保存另后的值。所以,不論是通過對象M還是通過對象N來引用的值都是一樣的,即為54。

  靜態(tài)成員函數(shù)

  靜態(tài)成員函數(shù)和靜態(tài)數(shù)據(jù)成員一樣,它們都屬于類的靜態(tài)成員,它們都不是對象成員。因此,對靜態(tài)成員的引用不需要用對象名。

  在靜態(tài)成員函數(shù)的實現(xiàn)中不能直接引用類中說明的非靜態(tài)成員,可以引用類中說明的靜態(tài)成員。如果靜態(tài)成員函數(shù)中要引用非靜態(tài)成員時,可通過對象來引用。下面通過例子來說明這一點。

  #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)用時不用對象名

  M::f1(Q);

  }

  讀者可以自行分析其結(jié)果。從中可看出,調(diào)用靜態(tài)成員函數(shù)使用如下格式:

  <類名>::<靜態(tài)成員函數(shù)名>(<參數(shù)表>);

  C和C++經(jīng)典筆試題附答案解析篇3

  判斷選擇

  1. C++語言沒有可移植性。 B不正確

  2. 定義數(shù)組時可以不確定元素個數(shù)。 B不正確

  3. 指針是一種特殊的變量,只能用來保存地址。 A正確

  4. 通過引用或者指針調(diào)用對象的成員函數(shù)時,如果引用或者指針的類型跟對象的類型不一致時,能自動正確調(diào)用對象所屬的類中對這個函數(shù)的定義。 B不正確

  5.類myclass,為myclass類對象以成員函數(shù)形式重載后++運算符的聲明應該為 C myclass operator++( int );

  A. myclass operator++();

  B. myclass& operator++();

  C. D. myclass& operator++( int );

  5. 父類和子類各自定義一個成員函數(shù),函數(shù)名相同,參數(shù)表不同,那么 C子類中的函數(shù)會覆蓋父類中的函數(shù)。 函數(shù)同名,通通覆蓋,不同層次的函數(shù)不能重載

  6. 如果myclass類定義了拷貝構造函數(shù)和一個整型參數(shù)的構造函數(shù),還重載了賦值運算符,那么語句

  myclass obj = 100;會 B調(diào)用整型參數(shù)的構造函數(shù)。等價于 myclass obj = myclass(100)

  7. 抽象類指的是 D有純虛函數(shù)的類

  8. 多重繼承時,如果派生類的兩個父類有一個共同的虛基類,那么虛基類的初始化參數(shù)由 C派生類

  的構造函數(shù)來傳遞。

  9. 多態(tài)性是通過 C虛函數(shù) 實現(xiàn)的。

  10. 如果有如下語句

  char str[20];

  cin >> str;

  cout << str;

  執(zhí)行時輸入的是“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í)行語句

  char ch[] = “Hello”;

  char * p = &ch[0];

  cout << p;

  結(jié)果是輸出 C 。Hello

  12.以下生面是否正確?

  Class A{ const int size=0;};

  答案:常量必須在構造函數(shù)的初始化列表里面初始化或者將其設置為static

  正確的程序如下:

  Class A

  { A(){ const int size=0; }};

  或者:

  Class A

  { static const int size=0; };

3157723