C++面試常見問題


這裡我們將看到一些重要的C++面試問題。

  • C和C++有什麼區別?

要點CC++
簡介C語言由丹尼斯·裡奇在1969年左右於AT&T貝爾實驗室開發。C++由Bjarne Stroustrup於1979年開發。
語言型別如前所述,C是程序式程式設計語言。另一方面,C++支援過程式和麵向物件程式設計正規化。
OOPs特性支援由於C不支援OOPs概念,因此它不支援多型性、封裝和繼承。C++作為面向物件程式語言,支援多型性、封裝和繼承。
資料安全由於C不支援封裝,資料表現為自由實體,可以被外部程式碼操作。另一方面,在C++中,封裝隱藏了資料,以確保資料結構和運算子按預期使用。
驅動型別C通常被稱為函式驅動語言。另一方面,C++被稱為物件驅動語言。
支援的特性C不支援函式和運算子過載,也沒有名稱空間特性和引用變數功能。另一方面,C++支援函式和運算子過載,也有名稱空間特性和引用變數功能。
  • 指標和引用有什麼區別?

指標和引用之間的主要區別在於:

  • 引用用於以另一個名稱引用現有變數,而指標用於儲存變數的地址。

  • 引用不能賦值為null值,但指標可以。

  • 引用變數可以透過值傳遞來引用,而指標可以透過引用傳遞來引用。

  • 引用必須在宣告時初始化,而指標則不必。

  • 引用與原始變數共享相同的記憶體地址,但也佔用堆疊上的一些空間,而指標擁有其自身的記憶體地址和堆疊上的大小。

  • 什麼是C++中的虛擬函式?

C++中的虛擬函式用於建立基類指標列表,並呼叫任何派生類的成員函式,而無需知道派生類物件的型別。虛擬函式在執行時解析。

如果基類中宣告的虛擬函式是成員函式,那麼它在從該基類派生的每個類中都成為虛擬函式。因此,在派生類中宣告基類虛擬函式的重新定義版本時,不需要使用關鍵字virtual。

示例

 線上演示

#include<iostream>
using namespace std;
class B {
   public:
   virtual void s() {
      cout<<" In Base \n";
   }
};
class D: public B {
   public:
   void s() {
      cout<<"In Derived \n";
   }
};
int main(void) {
   D d; // An object of class D
   B *b= &d; // A pointer of type B* pointing to d
   b->s(); // prints"D::s() called"
   return 0;
}

輸出

In Derived

什麼是C++中的this指標?

C++中的每個物件都可以透過一個重要的指標(this指標)訪問其自身的地址。this指標是所有成員函式的隱式引數。因此,在成員函式內部,this可以用來引用呼叫物件。

友元函式沒有this指標,因為友元不是類的成員。只有成員函式才有this指標。

讓我們嘗試以下示例來理解this指標的概念:

示例

 線上演示

#include <iostream>
using namespace std;
class Box {
   public:
   // Constructor definition
   Box(double l = 2.0, double b = 2.0, double h = 2.0) {
      cout <<"Constructor called." << endl;
      length = l;
      breadth = b;
      height = h;
   }
   double Volume() {
      return length * breadth * height;
   }
   int compare(Box box) {
      return this->Volume() > box.Volume();
   }
   private:
   double length; // Length of a box
   double breadth; // Breadth of a box
   double height; // Height of a box
};
int main(void) {
   Box Box1(3.3, 1.2, 1.5); // Declare box1
   Box Box2(8.5, 6.0, 2.0); // Declare box2
   if(Box1.compare(Box2)) {
      cout << "Box2 is smaller than Box1" <<endl;
   } else {
      cout << "Box2 is equal to or larger than Box1" <<endl;
   }
   return 0;
}

輸出

Constructor called.
Constructor called.
Box2 is equal to or larger than Box1

更新於:2020年1月3日

285 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告