Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Các câu hỏi phỏng vấn C++ thường gặp


1. Khác biệt giữa C và C++

Tiêu chíCC++
Người phát triểnDennis Ritchie, ~1969, AT&T Bell LabsBjarne Stroustrup, 1979
Loại ngôn ngữThủ tục (procedural)Thủ tục + Hướng đối tượng (OOP)
Hỗ trợ OOPKhông (không có polymorphism, encapsulation, inheritance)Có đầy đủ
Bảo mật dữ liệuDữ liệu tự do, bị thao tác từ ngoàiEncapsulation che giấu dữ liệu
Kiểu驱动Function-drivenObject-driven
Tính năngKhông overload, namespace, referenceCó overload, namespace, reference

2. Khác biệt con trỏ (pointer) và tham chiếu (reference)

  • Reference: bí danh biến khác; Pointer: lưu địa chỉ biến
  • Reference không thể null; Pointer có thể null
  • Reference truyền giá trị (pass by value); Pointer truyền tham chiếu (pass by reference)
  • Reference phải khởi tạo khi khai báo; Pointer không bắt buộc
  • Reference chia sẻ địa chỉ với biến gốc; Pointer có địa chỉ và kích thước riêng trên stack

3. Hàm ảo (Virtual Function) trong C++

Dùng để tạo danh sách con trỏ lớp cơ sở và gọi phương thức lớp dẫn xuất mà không cần biết kiểu đối tượng dẫn xuất. Giải quyết tại runtime (late binding).

Nếu hàm ảo khai báo trong lớp cơ sở, nó tự động thành ảo trong tất cả lớp dẫn xuất (từ khóa virtual không bắt buộc ở lớp dẫn xuất).

class B { public: virtual void s() { cout << "In Base\n"; } };
class D: public B { public: void s() { cout << "In Derived\n"; } };
int main() { D d; B *b = &d; b->s(); }  // In "In Derived"

4. Con trỏ this trong C++

Mọi đối tượng truy cập địa chỉ mình qua con trỏ this. Tham số ngầm của mọi hàm thành viên. Dùng để tham chiếu đối tượng đang gọi.

Friend function không có this (không phải member). Chỉ member function có this.

class Box {
    double length, breadth, height;
public:
    Box(double l=2, double b=2, double h=2) : length(l), breadth(b), height(h) {}
    double Volume() { return length * breadth * height; }
    int compare(Box box) { return this->Volume() > box.Volume(); }
};