Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

คำถามสัมภาษณ์ C++ ที่พบบ่อย


เราจะมาดูคำถามสัมภาษณ์ที่สำคัญเกี่ยวกับ C++

  • อะไรคือความแตกต่างระหว่าง C และ C++?

คีย์ C C++
แนะนำตัว C ได้รับการพัฒนาโดย Dennis Ritchie ในราวปี 1969 ที่ AT&T Bell Labs C++ ได้รับการพัฒนาโดย Bjarne Stroustrup ในปี 1979
ประเภทภาษา ดังที่กล่าวก่อนหน้า C คือการเขียนโปรแกรมเชิงขั้นตอน ในทางกลับกัน C++ รองรับกระบวนทัศน์การเขียนโปรแกรมทั้งแบบขั้นตอนและเชิงวัตถุ
รองรับฟีเจอร์ OOP เนื่องจาก C ไม่รองรับแนวคิด OOP จึงไม่รองรับความหลากหลาย การห่อหุ้ม และการสืบทอด C++ รองรับ polymorphism, encapsulation และ inheritance เนื่องจากเป็นภาษาการเขียนโปรแกรมเชิงวัตถุ
ความปลอดภัยของข้อมูล เนื่องจาก C ไม่รองรับการห่อหุ้ม ดังนั้นข้อมูลจึงทำหน้าที่เป็นเอนทิตีอิสระและสามารถจัดการได้ด้วยโค้ดภายนอก ในทางกลับกัน ในกรณีของการห่อหุ้ม C++ จะซ่อนข้อมูลเพื่อให้แน่ใจว่ามีการใช้โครงสร้างข้อมูลและตัวดำเนินการตามที่ตั้งใจไว้
ประเภทการขับเคลื่อน C โดยทั่วไปเรียกว่าภาษาที่ขับเคลื่อนด้วยฟังก์ชัน ในทางกลับกัน C++ เรียกว่าภาษาที่ขับเคลื่อนด้วยอ็อบเจกต์
รองรับฟีเจอร์ C ไม่รองรับฟังก์ชันและการโอเวอร์โหลดของโอเปอเรเตอร์ก็ไม่มีฟีเจอร์เนมสเปซและฟังก์ชันตัวแปรอ้างอิง ในทางกลับกัน C++ รองรับทั้งฟังก์ชันและการโอเวอร์โหลดของโอเปอเรเตอร์ นอกจากนี้ยังมีฟีเจอร์เนมสเปซและฟังก์ชันตัวแปรอ้างอิงอีกด้วย
  • อะไรคือความแตกต่างระหว่างพอยน์เตอร์และการอ้างอิง?

ความแตกต่างที่สำคัญระหว่างพอยน์เตอร์และการอ้างอิงคือ -

  • การอ้างอิงใช้เพื่ออ้างถึงตัวแปรที่มีอยู่ในชื่ออื่น ในขณะที่ตัวชี้ถูกใช้เพื่อเก็บที่อยู่ของตัวแปร

  • การอ้างอิงไม่สามารถกำหนดค่า null ได้ แต่ตัวชี้สามารถ

  • ตัวแปรอ้างอิงสามารถอ้างอิงโดยผ่านค่าในขณะที่ตัวชี้สามารถอ้างอิงได้ แต่ผ่านโดยการอ้างอิง

  • การอ้างอิงจะต้องเริ่มต้นในการประกาศในขณะที่ไม่จำเป็นในกรณีของตัวชี้

  • การอ้างอิงใช้ที่อยู่หน่วยความจำเดียวกันกับตัวแปรดั้งเดิม แต่ยังใช้พื้นที่บางส่วนบนสแต็กในขณะที่ตัวชี้มีที่อยู่หน่วยความจำและขนาดของตัวเองบนสแต็ก

  • ฟังก์ชันเสมือนใน C++ คืออะไร

ฟังก์ชันเสมือนใน C ++ ใช้เพื่อสร้างรายการพอยน์เตอร์คลาสพื้นฐานและเมธอดการเรียกของคลาสที่ได้รับมาโดยที่ไม่รู้ด้วยซ้ำว่าคลาสอ็อบเจ็กต์ใดที่ได้รับมา ฟังก์ชันเสมือนได้รับการแก้ไขล่าช้า ณ รันไทม์

ถ้าฟังก์ชันเสมือนในคลาสฐานถูกประกาศเป็นฟังก์ชันที่เป็นสมาชิก ฟังก์ชันนั้นจะกลายเป็นเสมือนในทุกคลาสที่ได้มาจากคลาสพื้นฐานนั้น ดังนั้น การใช้คำหลักเสมือนจึงไม่จำเป็นในคลาสที่ได้รับในขณะที่ประกาศเวอร์ชันที่กำหนดไว้ใหม่ของฟังก์ชันคลาสฐานเสมือน

ตัวอย่าง

#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++ คืออะไร

ทุกอ็อบเจ็กต์ใน C ++ มีสิทธิ์เข้าถึงที่อยู่ของตนเองผ่านตัวชี้สำคัญที่เรียกว่าตัวชี้นี้ ตัวชี้นี้เป็นพารามิเตอร์โดยนัยสำหรับฟังก์ชันของสมาชิกทั้งหมด ดังนั้น ในฟังก์ชันสมาชิก อาจใช้เพื่ออ้างถึงอ็อบเจกต์ที่เรียกใช้

ฟังก์ชัน Friend ไม่มีตัวชี้นี้ เนื่องจากเพื่อนไม่ใช่สมาชิกของชั้นเรียน เฉพาะฟังก์ชันสมาชิกเท่านั้นที่มีตัวชี้นี้

ให้เราลองดูตัวอย่างต่อไปนี้เพื่อทำความเข้าใจแนวคิดของตัวชี้นี้ -

ตัวอย่าง

#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