Câu hỏi phỏng vấn Lập trình viên C++

109 Các câu hỏi phỏng vấn Lập trình viên C++ được chia sẻ bởi các ứng viên

Phỏng vấn là một phần cần thiết trong quá trình lựa chọn của bất kỳ công ty hoặc tổ chức nào. Để đối mặt với thử thách này, bạn cần chuẩn bị đầy đủ về mặt tinh thần lẫn chất lượng các câu trả lời. Đặc biệt là trong lĩnh vực IT, khi các câu hỏi kỹ thuật được cho là chủ đề chính trong các buổi phỏng vấn. Bài tổng hợp các câu hỏi phỏng vấn C++ đến từ 1900 ở dưới đây sẽ giúp bạn có được sự chuẩn bị ưng ý nhất!

Các câu hỏi phỏng vấn chuyên môn

Câu 1: Các kiểu dữ liệu khác nhau có trong C++ là gì?

Đây là dạng câu hỏi cơ bản nhất trong số các câu hỏi phỏng vấn C++ thường gặp. Có 4 kiểu dữ liệu trong C++, cụ thể:

  • Kiểu dữ liệu nguyên thủy (kiểu dữ liệu cơ bản). Ví dụ- char, short, int, float, long, double, bool, v.v.
  • Kiểu dữ liệu dẫn xuất. Ví dụ- array, pointer, v.v.
  • Kiểu dữ liệu liệt kê. Ví dụ- enum
  • Các kiểu dữ liệu do người dùng định nghĩa. Ví dụ- structure, class, v.v.

Câu 2: Giải thích hai khái niệm lớp (class) và đối tượng (object) trong C++

Trong C++, class hay lớp được hiểu là bản thiết kế của object – đối tượng. Nó là kiểu dữ liệu do người dùng định nghĩa với các thành viên dữ liệu và các hàm thành viên và được định nghĩa bằng từ khóa class.

Ngược lại, bạn có thể định nghĩa object – đối tượng là sự thể hiện hay xuất hiện của một class – lớp. Khi nó tạo đối tượng, thì nó có thể hoạt động trên cả thành viên dữ liệu và hàm thành viên.

Câu 3: Ưu điểm của C++ là gì?

Các câu hỏi phỏng vấn C++ dạng này đòi hỏi bạn phải có kiến thức vững chắc về cả C lẫn C++. C++ không chỉ duy trì tất cả các khía cạnh tốt đẹp từ ngôn ngữ C, nó còn đơn giản hóa việc quản lý bộ nhớ và thêm một số tính năng như:

  • C++ là ngôn ngữ có tính di động cao, nghĩa là phần mềm được phát triển bằng ngôn ngữ C++ có thể chạy trên mọi nền tảng.
  • C++ là ngôn ngữ lập trình hướng đối tượng bao gồm các khái niệm như lớp, đối tượng, kế thừa, đa hình, trừu tượng.
  • C++ có khái niệm kế thừa. Thông qua kế thừa, người ta có thể loại bỏ mã dư thừa và có thể sử dụng lại các lớp hiện có.
  • Ẩn dữ liệu giúp lập trình viên xây dựng các chương trình an toàn để chương trình không thể bị tấn công bởi hacker.
  • C++ chứa một thư viện hàm phong phú.

Câu 4: Hãy phân biệt vòng lặp while và vòng lặp do-while trong C++

Vòng lặp while xác minh điều kiện; nếu nó đúng, thì nó sẽ lặp lại vòng lặp cho đến khi điều kiện trở thành sai. Nếu điều kiện là sai trong vòng lặp while, thì không một câu lệnh nào sẽ thực thi bên trong vòng lặp.

Đối với vòng lặp do-while, mọi chuyện diễn ra khác hơn ở phần sau. Đầu tiên, vòng lặp do-while lặp lại thân vòng lặp một lần, sau đó nó kiểm tra điều kiện. Nếu điều kiện trong vòng lặp do-while là sai, thì phần thân cũng sẽ thực hiện một lần.

Câu 5: Bạn hiểu gì về đa hình trong C++?

Thuật ngữ đa hình đề cập đến sự hiện diện của nhiều hình thức. Thuật ngữ này cũng được đề cập khá thường xuyên trong các câu hỏi phỏng vấn C++.

Tính đa hình thường xảy ra khi có một hệ thống phân cấp của các lớp được liên kết với nhau bằng tính kế thừa. Tính đa hình trong C++ có nghĩa là tùy thuộc vào loại đối tượng gọi hàm mà một hàm khác sẽ được thực thi.

Câu 7: Chức năng ảo là gì?

Một hàm thành viên trong lớp cơ sở được định nghĩa lại trong lớp dẫn xuất là một hàm ảo. Nó được khai báo bằng từ khóa virtual. Chức năng ảo có nhiệm vụ đảm bảo sự chính xác trong việc gọi đối tượng của một hàm. Điều này đúng trong mọi trường hợp kể cả khi chúng ta tạo lệnh với tham chiếu hay con trỏ để gọi hàm đó. Các chức năng ảo chủ yếu được sử dụng cho đa hình thời gian chạy.

Câu 8: Trừu tượng hóa trong C++ là gì?

Trừu tượng hóa là quá trình hiển thị các chi tiết cần thiết cho người dùng và ẩn các chi tiết mà nhà phát triển không muốn hiển thị cho người dùng hoặc ẩn các chi tiết không liên quan đến một người dùng cụ thể.

Câu 9: Ba loại chỉ định truy cập C++ khác nhau là gì?

Đối với các câu hỏi phỏng vấn C++, ba loại chỉ định truy cập thường dễ gây nhầm lẫn. Cụ thể:

  • Public: Tất cả các hàm thành viên và thành viên dữ liệu đều có thể truy cập được bên ngoài lớp.
  • Protected: Ở trong lớp (class) và lớp dẫn xuất, các hàm thành viên và thành viên dữ liệu đều được cấp quyền truy cập.
  • Private: Hạn chế quyền truy cập dữ liệu bên ngoài lớp của tất cả các chức năng thành viên và thành viên dữ liệu.

Câu 10: Gọi theo giá trị và gọi theo tham chiếu trong C++ là gì?

Trong phương thức gọi theo giá trị, bạn chuyển các bản sao của tham số thực sang tham số hình thức của hàm. Điều này có nghĩa là nếu có bất kỳ thay đổi nào về giá trị bên trong hàm thì thay đổi đó sẽ không ảnh hưởng đến giá trị thực.

Trong phương thức gọi theo tham chiếu, tham chiếu hoặc địa chỉ của các tham số thực tế được gửi đến các tham số chính thức của hàm. Điều này có nghĩa là mọi thay đổi về giá trị bên trong hàm sẽ được phản ánh trong các giá trị thực tế.

Câu 11: Khi nào thì kiểu trả về void() được sử dụng?

Kiểu trả về void() trong C++ không hợp lệ, vì không thể khai báo một hàm trả về một kiểu dữ liệu không hợp lệ. Tuy nhiên, ta có thể sử dụng kiểu trả về void trong C++ khi chúng ta muốn chỉ thực hiện một hành động mà không cần trả về bất kỳ giá trị nào từ hàm đó.

Câu 12: Toán tử phân giải phạm vi là gì?

Toán tử phân giải phạm vi được biểu diễn dưới dạng :: Toán tử này được sử dụng để liên kết định nghĩa hàm với một lớp cụ thể.

Toán tử phạm vi được sử dụng cho các mục đích sau:

  • Để truy cập một biến toàn cục khi bạn có một biến cục bộ trùng tên.
  • Để định nghĩa một hàm bên ngoài lớp.

Câu 13: Sự khác biệt giữa bản sao nông và bản sao sâu là gì?

Các câu hỏi phỏng vấn C++ ở mức độ Advanced thường hay đề cập đến khả năng phân biệt hai khái niệm đối lập nhau. Bản sao nông lưu trữ các tham chiếu của các đối tượng đến địa chỉ bộ nhớ ban đầu. Bản sao nông nhanh hơn bản sao sâu và phản ánh những thay đổi được thực hiện đối với đối tượng mới/được sao chép trong đối tượng ban đầu.

Ngược lại, bản sao sâu tạo một bản sao mới và riêng biệt của toàn bộ đối tượng với địa chỉ bộ nhớ duy nhất của nó. Bản sao sâu tương đối chậm. Bản sao sâu không phản ánh những thay đổi được thực hiện đối với đối tượng mới/được sao chép trong đối tượng gốc

Câu 14: Nếu lớp D được dẫn xuất từ một lớp cơ sở B. Khi tạo một đối tượng kiểu D, các hàm tạo của các lớp này sẽ được gọi theo thứ tự nào?

Dạng câu hỏi tình huống như trên cũng hay xuất hiện trong các câu hỏi phỏng vấn C++. Lớp dẫn xuất có hai phần, phần cơ sở và phần dẫn xuất. Khi C++ xây dựng các đối tượng dẫn xuất, nó thực hiện theo từng giai đoạn. Đầu tiên, lớp cơ sở nhất (ở trên cùng của cây thừa kế) được xây dựng. Sau đó, mỗi lớp con được xây dựng theo thứ tự cho đến khi lớp con nhiều nhất được xây dựng sau cùng.

Vì vậy, hàm tạo đầu tiên của lớp B sẽ được gọi và sau đó hàm tạo của lớp D sẽ được gọi. Trong quá trình phá hủy, mọi thứ sẽ tuân theo thứ tự ngược. Đó là hàm hủy bắt đầu ở lớp có nguồn gốc cao nhất và di chuyển xuống lớp cơ sở. Vì vậy, hàm hủy đầu tiên của lớp D sẽ được gọi và sau đó hàm hủy của lớp B sẽ được gọi.

Những lưu ý khi đi phỏng vấn vị trí lập trình viên C++

Dưới đây là một số lưu ý quan trọng khi bạn đi phỏng vấn cho vị trí lập trình viên C++ hoặc bất kỳ vị trí công việc nào:

Nghiên cứu công ty

Trước khi đi phỏng vấn, hãy tìm hiểu kỹ về công ty mà bạn sẽ phỏng vấn. Điều này bao gồm hiểu về lịch sử, vị trí trong thị trường, văn hóa công ty, và các dự án quan trọng mà họ đang làm.

Chuẩn bị câu trả lời

Hãy chuẩn bị các câu trả lời cho các câu hỏi thường gặp trong phỏng vấn như "Giới thiệu về bản thân," "Tại sao bạn muốn làm việc ở đây?" và "Tại sao bạn phù hợp cho vị trí này?"

Thể hiện kỹ năng C++

Chuẩn bị để thể hiện kỹ năng lập trình C++ của bạn. Bạn có thể được yêu cầu giải quyết bài tập lập trình hoặc trả lời các câu hỏi kỹ thuật về ngôn ngữ lập trình này.

Sự tự tin và chuyên nghiệp

Điều này bao gồm cách bạn giao tiếp, ăn mặc, và thái độ tự tin trong suốt cuộc phỏng vấn. Hãy thể hiện rõ ràng sự chuyên nghiệp và đam mê của bạn đối với công việc.

Câu hỏi cho người tuyển dụng

Đừng quên chuẩn bị một số câu hỏi để hỏi người tuyển dụng. Điều này thể hiện sự quan tâm của bạn và giúp bạn hiểu rõ hơn về công việc và môi trường làm việc.

Thái độ tích cực và linh hoạt

Thể hiện thái độ tích cực và sẵn sàng học hỏi và thích nghi trong môi trường làm việc mới.

Chú ý đến cơ hội phát triển

Hỏi về cơ hội phát triển sự nghiệp và sự hỗ trợ mà công ty có thể cung cấp cho bạn để bạn có thể xây dựng tương lai tại công ty.

Kỹ năng giải quyết vấn đề

Thể hiện khả năng giải quyết vấn đề của bạn bằng cách đặt ra các ví dụ cụ thể về cách bạn đã đối phó với các thách thức trong quá khứ.

Theo dõi sau phỏng vấn

Sau khi phỏng vấn, gửi một email cảm ơn ngắn gọn đến người phỏng vấn để thể hiện lòng biết ơn và quan tâm của bạn đối với vị trí.

Giữ thái độ thoải mái

Cố gắng giữ thái độ thoải mái và tự tin trong suốt quá trình phỏng vấn. Điều này sẽ giúp bạn tạo ấn tượng tích cực với người tuyển dụng.

Câu hỏi phỏng vấn

Lập trình viên C++ được hỏi... 27/10/2023

Tệp Header trong ngôn ngữ C là gì ?

1 câu trả lời

  • Tệp header là tệp chứa khai báo hàm và định nghĩa macro cho C trong các hàm thư viện được xây dựng.
  • Tất cả các hàm thư viện chuẩn C được khai báo trong các tệp header được lưu dưới dạng file_name.h.
  • Chúng ta đưa các tệp header này vào chương trình C của mình bằng lệnh “#include” để sử dụng các hàm được khai báo trong tệp header.
  • Khi chúng ta đưa tệp header vào chương trình C của mình bằng lệnh “#include”, tất cả mã C của tệp header đều được đưa vào chương trình. Sau đó, chương trình C này được biên dịch bởi trình biên dịch và thực thi.
Lập trình viên C++ được hỏi... 27/10/2023

Hàm hủy (Destructor) là gì ? Nó có thể bị nạp chồng (overloaded) không ?

1 câu trả lời

Hàm hủy là hàm thành viên của lớp có cùng tên với tên lớp và được đặt trước bằng ký hiệu (~). Nó được thực thi tự động w.r.t đối tượng ngay sau khi đối tượng mất phạm vi. Nó không thể được nạp chồng và dạng duy nhất là không có tham số.

Lập trình viên C++ được hỏi... 27/10/2023

Theo mặc định, mọi biến cục bộ của hàm là tự động (auto). Trong hàm dưới đây, cả hai biến ‘i’ và ‘j’ đều là biến tự động

1 câu trả lời

void f()
{
    int i;
    auto int j;
}
Lập trình viên C++ được hỏi... 27/10/2023

Các cách khác nhau để truyền tham số cho các hàm là gì ? Sử dụng cái nào khi nào ?

1 câu trả lời

  • Truyền theo giá trị (Pass by value) – Chỉ gửi các giá trị cho hàm dưới dạng tham số. Chúng ta chọn kiểu này nếu không muốn làm thay đổi giá trị của tham số thực tế.
  • Truyền theo địa chỉ (Pass by address) – Chỉ gửi địa chỉ của các tham số thực tế thay vì các giá trị. Chọn điều này nếu chúng ta muốn các tham số thực tế được sửa đổi với các tham số chính thức.
  • Truyền bằng tham chiếu (Pass by reference) – Các tham số thực tế được nhận với các biến tham chiếu mới C++ làm tham số chính thức. Chọn điều này nếu ta muốn các tham số thực tế được sửa đổi với các tham số chính thức.
Lập trình viên C++ được hỏi... 27/10/2023

Toán tử số học trong C là gì ?

1 câu trả lời

  • Các toán tử số học được sử dụng để thực hiện các phép tính toán số học như cộng, trừ, nhân, chia và lấy phần dư trong các chương trình C.
  • Các toán tử số học là +, -, *, /,%.
Lập trình viên C++ được hỏi... 27/10/2023

Tất cả các câu lệnh điều khiển vòng lặp trong C là gì ?

1 câu trả lời

Các câu lệnh điều khiển lặp trong C được sử dụng để thực hiện các hoạt động lặp khi điều kiện cho trước là đúng. Khi điều kiện cho trước sai, chương trình sẽ thoát khỏi vòng lặp. Có 3 loại câu lệnh điều khiển vòng lặp trong C là: for, while, do while.

Lập trình viên C++ được hỏi... 27/10/2023

Sự khác biệt giữa các hàm memcpy() và strcpy() trong C là gì ?

1 câu trả lời

  • Hàm memcpy() được sử dụng để sao chép một số byte được chỉ định từ bộ nhớ này sang bộ nhớ khác. Trong khi, hàm strcpy() được sử dụng để sao chép nội dung của một chuỗi vào một chuỗi khác.
  • Hàm memcpy() hoạt động trên một bộ nhớ thay vì giá trị. Trong khi, hàm strcpy() hoạt động trên giá trị chứ không phải bộ nhớ.
Lập trình viên C++ được hỏi... 27/10/2023

Dòng mã bên dưới sẽ in ra gì và tại sao ?

1 câu trả lời

 
#include
 
int main(int argc, char **argv)
{
    std::cout << 25u – 50;
    return 0;

Câu trả lời không phải là -25. Thay vào đó, câu trả lời (sẽ khiến nhiều người ngạc nhiên) là 4294967271, giả sử đây là số nguyên 32 bit. Tại sao lại vậy?

Trong C++, nếu kiểu của hai toán hạng khác nhau, thì toán hạng có “kiểu thấp hơn” sẽ được thăng cấp thành kiểu của toán hạng “kiểu cao hơn”, sử dụng hệ thống phân cấp kiểu sau (được liệt kê ở đây từ kiểu cao nhất đến thấp nhất ): long double, double, float, unsigned long int, long int, unsigned int, int (thấp nhất).

Vì vậy, khi hai toán hạng, như trong ví dụ trên, 25u (unsigned int) và 50 (int), 50 cũng được thăng cấp thành số nguyên không dấu (tức là, 50u).

Hơn nữa, kết quả của phép toán sẽ phụ thuộc vào loại của toán hạng. Do đó, kết quả của 25u – 50u cũng sẽ là một số nguyên không dấu. Vì vậy, kết quả của -25 chuyển đổi thành 4294967271 khi được thăng cấp thành một số nguyên không dấu.

Lập trình viên C++ được hỏi... 27/10/2023

C ++ hỗ trợ đa kế thừa. “Vấn đề kim cương” (diamond problem) có thể xảy ra với đa thừa kế là gì? Cho một ví dụ

1 câu trả lời

Có nghĩa là chúng ta không thể tạo thừa kế lai bằng cách sử dụng kế thừa đa cấpphân cấp.

Hãy xem xét một ví dụ đơn giản. Một trường đại học có những người liên kết với nó. Một số là sinh viên, một số là giảng viên, một số là quản trị viên, v.v. Vì vậy, một sơ đồ kế thừa đơn giản có thể có nhiều loại người khác nhau trong các vai trò khác nhau, tất cả đều kế thừa từ một lớp “Person” chung. Lớp Person có thể định nghĩa một phương thức getRole() trừu tượng mà sau đó sẽ bị các lớp con của nó ghi đè để trả về kiểu vai trò chính xác.

Nhưng bây giờ điều gì sẽ xảy ra nếu chúng ta muốn mô hình hóa vai trò của một Trợ giảng (TA)? Thông thường, một TA vừa là sinh viên tốt nghiệp vừa là giảng viên. Điều này dẫn đến vấn đề kim cương cổ điển về đa kế thừa và dẫn đến sự mơ hồ liên quan đến phương thức TA’s getRole().

Lập trình viên C++ được hỏi... 27/10/2023

Lỗi trong đoạn mã dưới đây là gì và nên sửa lỗi đó như thế nào ?

1 câu trả lời

 
my_struct_t *bar;
 
/* … do stuff, including setting bar to point to a defined my_struct_t object … */
 
memset(bar, 0, sizeof(bar));

Đối số cuối cùng của memset phải là sizeof(*bar), không phải sizeof (bar). sizeof (bar) tính toán kích thước của bar (tức là chính con trỏ) chứ không phải là kích thước của cấu trúc được trỏ tới bởi bar.

Do đó, mã có thể được sửa bằng cách sử dụng sizeof(*bar) làm đối số cuối cùng trong lệnh gọi tới memset.

Một ứng viên nhạy bén có thể chỉ ra rằng việc sử dụng *bar sẽ gây ra lỗi hủy tham chiếu nếu bar chưa được gán. Do đó, một giải pháp an toàn hơn sẽ là sử dụng sizeof(my_struct_t). Tuy nhiên, một ứng cử viên sắc bén hơn nữa phải biết rằng trong trường hợp này, sử dụng *bar là hoàn toàn an toàn trong lệnh gọi sizeof, ngay cả khi bar chưa được khởi tạo, vì sizeof là được tính trong thời gian biên dịch.

Lập trình viên C++ được hỏi... 27/10/2023

Giải thích các định tính lưu trữ trong C++

1 câu trả lời

  • Const: Biến này có nghĩa là nếu bộ nhớ được khởi tạo một lần, nó sẽ không bị thay đổi bởi một chương trình.
  • Volatile: Biến này có nghĩa là giá trị trong vị trí bộ nhớ có thể được thay đổi mặc dù không có gì trong mã chương trình sửa đổi nội dung.
  • Mutable: Biến này có nghĩa là một thành viên cụ thể của một struct hoặc lớp có thể được thay đổi ngay cả khi một biến struct cụ thể, lớp hoặc hàm thành viên lớp là không đổi.
Lập trình viên C++ được hỏi... 27/10/2023

Viết hàm Display() có hai đối số

1 câu trả lời

 
cout << A[0] << ” “;
cout << A[1] << ” “;
 
…..
 
cout << A[N–1] << ” “;

Nói chung: cout << A[i] << ” “ ; trong đó i = 0 đến N-1

void Display( float A[ ], int N )
{
 
    for ( int i = 0; i<= N–1; i++)
    cout << A[i] << ” “;
    cout << endl;
}
Lập trình viên C++ được hỏi... 27/10/2023

Tìm kiếm là gì ? Giải thích tìm kiếm tuyến tính và nhị phân

1 câu trả lời

Việc tìm kiếm vị trí của một phần tử nhất định trong cấu trúc dữ liệu đã cho được gọi là tìm kiếm. Có hai loại tìm kiếm:

Tìm kiếm tuyến tính:

Trong đó, phần tử được tìm kiếm được so sánh từng phần tử của danh sách đã cho, bắt đầu với phần tử đầu tiên. Quá trình so sánh vẫn tiếp tục cho đến khi phần tử được tìm thấy hoặc đến khi hết danh sách.

Tìm kiếm nhị phân:

Đó là một kỹ thuật khác để tìm kiếm một phần tử trong danh sách nhất định với các phép so sánh tối thiểu có thể. Nhưng để áp dụng tìm kiếm nhị phân, một danh sách cần thỏa trước hai điều kiện:

  • Các phần tử của danh sách phải được sắp xếp theo thứ tự tăng dần hoặc giảm dần.
  • Danh sách phải có kích thước hữu hạn và phải ở dạng mảng tuyến tính.
Lập trình viên C++ được hỏi... 27/10/2023

Viết chương trình sử dụng hàm SHIFT_HALF() để chuyển các phần tử của mảng nửa đầu sang nửa sau và ngược lại

1 câu trả lời

swap(A[0], A[mid])
swap(A[1], A[mid+1])
….
swap(A[mid–1], A[N–1])

mid = n/2; i = 0, j = mid; swap( A[i], A[j] ) trong đó i = 0 đến mid-1.

 
void SHIFT_HALF( float A[], int n )
{
    int mid= n/2;
    for(int i = 0, j = mid; i<= mid–1; i++,j++)
    {
        float T = A[i];
        A[i] = A[j];
        A[j] = T;
    }
}
Lập trình viên C++ được hỏi... 27/10/2023

Giải thích thuật toán sắp xếp bubble.

1 câu trả lời

Trong Sắp xếp bubble, chúng ta phải thực hiện N-1 bước để sắp xếp một mảng tuyến tính.

  • Trong lần lặp đầu tiên, chúng ta so sánh A[0] với A[1], A[1] với A[2], …, A[N-2] với A[N-1] và hoán đổi chúng nếu chúng không theo thứ tự mong muốn.
  • Trong lần lặp thứ hai, chúng ta so sánh A[0] với A[1], A[1] với A[2], …, A[N-3] với A[N-2] và hoán đổi chúng nếu chúng không theo thứ tự mong muốn.
  • Trong lần lặp thứ ba, chúng ta so sánh A[0] với A[1], A[1] với A[2], …, A[N-4] với A[N-3] và hoán đổi chúng nếu chúng không theo thứ tự mong muốn.
  • Trong lần lặp cuối cùng, chúng tôi so sánh A[0] với A[1].
Lập trình viên C++ được hỏi... 27/10/2023

Các tình huống khác nhau khi một hàm tạo bản sao (copy constructor) được gọi là gì?

1 câu trả lời

Các tình huống khác nhau trong đó hàm tạo bản sao được gọi như sau:

  • Khi một đối tượng được định nghĩakhởi tạo với các giá trị của một đối tượng khác cùng kiểu, thì hàm tạo bản sao được gọi.
  • Khi một đối tượng được truyền bằng phương thức giá trị, thì hàm tạo bản sao sẽ được gọi để tạo bản sao của đối tượng được truyền cho hàm.
  • Khi một hàm trả về một đối tượng, thì hàm tạo bản sao được gọi để tạo một đối tượng tạm thời để giữ giá trị trả về trong bộ nhớ.
Lập trình viên C++ được hỏi... 27/10/2023

Liệt kê các đặc điểm đặc biệt của hàm tạo

1 câu trả lời

  • Một hàm tạo có cùng tên với tên của lớp.
  • Nó tự động được gọi khi một đối tượng của lớp được khai báo.
  • Hàm tạo tuân theo quy tắc truy cập thông thường. Hàm khởi tạo là private và protected chỉ có thể được truy cập bởi hàm thành viên và hàm bạn của lớp. Hàm tạo là public có sẵn cho tất cả các hàm. Chỉ hàm đó mới có thể tạo đối tượng có quyền truy cập vào hàm tạo.
  • Không có kiểu trả về nào được chỉ định cho hàm tạo.
  • Chúng không thể được kế thừa nhưng một lớp dẫn xuất có thể gọi hàm tạo của lớp cơ sở.
  • Một hàm tạo cũng có thể có các đối số mặc định.
  • Một hàm tạo có thể gọi các hàm thành viên.
  • Hàm tạo mặc định và hàm tạo bản sao chỉ được cung cấp bởi trình biên dịch nếu chúng không được người lập trình xác định.
Lập trình viên C++ được hỏi... 27/10/2023

Làm thế nào một phần tử mới có thể được thêm vào hoặc đẩy vào một ngăn xếp ?

1 câu trả lời

Đẩy một phần tử vào ngăn xếp:

  • Bất cứ khi nào một phần tử được đẩy vào ngăn xếp, TOP sẽ tăng lên 1 và sau đó phần tử được chèn vào mảng tuyến tính ký hiệu là S[] tại vị trí có chỉ số TOP tức là tại S[TOP]. Trong quá trình push(), một công đoạn có thể xảy ra khi TOP trỏ đến vị trí cuối cùng trong mảng S[] tức là nó bằng stksize-1, khi đó không thể đẩy thêm phần tử nào vào ngăn xếp và chúng ta nói rằng tràn ngăn xếp (stackoverflow).
  • Thuật toán Push(S,Top, Item)

Bước 1: If (Top == stksize-1)
then (i) Write “Stack Overflow ”
(ii) Exit

Bước 2: Top = Top + 1

Bước 3: S[Top] = Item

Bước 4: Exit

Lập trình viên C++ được hỏi... 27/10/2023

Hàm virtual là gì ?

1 câu trả lời

Tính đa hình (Polymorphism) cũng đạt được trong C++ bằng cách sử dụng các hàm ảo (virtual). Nếu một hàm có cùng tên tồn tại trong lớp cơ sở cũng như lớp cha, thì con trỏ đến lớp cơ sở sẽ gọi các hàm chỉ được liên kết với lớp cơ sở. Tuy nhiên, nếu hàm được tạo là virtual và con trỏ cơ sở được khởi tạo bằng địa chỉ của lớp dẫn xuất, thì hàm trong lớp con sẽ được gọi.

Lập trình viên C++ được hỏi... 27/10/2023

Làm thế nào để xử lý lỗi khi thực thi trong C++ ?

1 câu trả lời

  • Các lỗi thời gian chạy trong C++ có thể được xử lý bằng các ngoại lệ.
  • Cơ chế xử lý ngoại lệ này trong C++ được phát triển để xử lý các lỗi trong phần mềm được tạo thành từ các thành phần được phát triển độc lập hoạt động trong một quy trình và được kiểm soát đồng bộ.
  • Theo C++, bất kỳ routine nào không thực hiện đúng theo hứa hẹn của nó đều có ngoại lệ. Hàn gọi cần biết cách xử lý những trường hợp ngoại lệ này có thể bắt được nó.a
Đang xem 1 - 20 trong 109 câu hỏi phỏng vấn