on tap trac nghiem lthdt khoa7

83
Trang 17/36 ÔN TẬP TRẮC NGHIỆM LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG http://www.4shared.com/file/yvt1cjkh/ N_TP_TRC_NGHIM_LP_TRNH_HNG_I_T.html PHẦN I: CƠ BẢN Câu 1. Chọn các khai báo đúng trong các khai báo sau: A. int *pn; pn = new int B. int *pn; &pn = new int[100]; C. float *px; px = new float; D. float *px; *px = new float; Câu 2. Chọn câu Sai : trong một chương trình C++, có thể không có: A. phần khai báo hằng B. phần đầu chương trình C. phần thân chương trình D. phần khai báo biến Câu 3. Trong C++, lệnh nào có tác dụng xóa màn hình : A. clrscl(); B. clrscr();C. clrssr(); D. clrsr(); Câu 4. Kết quả xuất ra khi biên dịch khối lệnh sau : int num=5, sum=0;

Upload: vithienquan

Post on 05-Jul-2015

168 views

Category:

Documents


7 download

TRANSCRIPT

Page 1: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

ÔN TẬP TRẮC NGHIỆM LẬP TRÌNH HƯỚNG ĐỐI TƯỢNGhttp://www.4shared.com/file/yvt1cjkh/

N_TP_TRC_NGHIM_LP_TRNH_HNG_I_T.html

PHẦN I: CƠ BẢNCâu 1. Chọn các khai báo đúng trong các khai báo sau:

A. int *pn; pn = new int B. int *pn; &pn = new int[100];

C. float *px; px = new float; D. float *px; *px = new float;

Câu 2. Chọn câu Sai : trong một chương trình C++, có thể không có:A. phần khai báo hằng B. phần đầu chương trình

C. phần thân chương trình D. phần khai báo biến

Câu 3. Trong C++, lệnh nào có tác dụng xóa màn hình :A. clrscl(); B. clrscr(); C. clrssr(); D. clrsr();

Câu 4. Kết quả xuất ra khi biên dịch khối lệnh sau :

int num=5, sum=0;

while (num > 0)

{

if (num %2 !=0)

sum+=num;

--num;

}

cout << "The sum is " << sum << endl;A. The sum is 9 B. The sum is 5 C. The sum is 15D. The sum is 0

Page 2: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

Câu 5. Cho biết giá trị của của các biến sau khi đọan chương trình trên được thực thi?

x = 9; y = 3; x = --y;

A. x = 3, y = 2 B. x = 3, y = 3 C. x = 9, y = 2 D. x = 2, y = 2

Câu 6. Cho biết kết quả xuất ra của chương trình sau đây trên màn hình là gì?

int main()

{

int num[5] = { 2, 4, 6, 8, 10 };

int i;

fn(num);

for( i = 0; i < 5; i++ )

cout << num[i] << ' ';

return 0;

}

int fn( int n[] )

{

n[3] = n[3] + 1;

}A. Không hiển thị gì cả B. 2 4 7 8 10 C. 2 4 6 8 10 D. 2

4 6 9 10

Câu 7. Phải đặt khai báo biến ở đâu trong chương trình:A. đặt trước hàm main().B. đặt ngay sau dấu { đầu tiên của thân hàm và cần đứng sau câu lệnh

clrscr().

Page 3: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

C. đặt ngay sau dấu { đầu tiên của thân hàm và cần đứng trước mọi câu lệnh khác

D. đặt trước câu lệnh tiền xử lý (từ khoá : include)

Câu 8. cho biết đoạn chương trình sau khi thi hành xuất ra màn hình kết quả gì?

void main()

{

int x = 500, y = 100, t ;

t = x * y;

cout<<t;

}A. Tất cả các câu trên đều sai. B. 32767 C. Không in gì cảD. 50000

Câu 9. Hãy cho biết giá trị của b sau đoạn chương trình:

int a=1,b=(a)?1:2;

b+=1;

A. 3 B. Lỗi chương trình C. 2 D. 0

Câu 10. lệnh cout nằm trong thư viện nào sau đây: A. iostream.h B. stdlib.h C. stdio.h D. conio.h

Câu 11. Cho biết kết quả xuất ra của chương trình sau đây trên màn hình là gì?

int1 = 120;

Page 4: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

cin >> int2; // Giả sử người sử dụng nhập vào 30

if ((int1 > 100) && (int2 = 50))

int3 = int1 + int2;

else

int3 = int1 - int2;

cout << int1 << ' ' << int2 << ' ' << int3;A. 120 30 150 B. 120 30 90 C. 120 50 170 D. 120 30 70

Câu 12. cho biết kết quả của biểu thức !( 2>1 || 1>2 )

A. TRUE B. 0 C. 1 D. FALSE

Câu 13. cho biết kết quả của đoạn chương trình sau:

int a=5,b=9;

int m=a>b ? a++ : b++;

int n=a<b ? --a : --b;

cout<<--n+(++m);A. 14 B. 13 C. 11 D. 7

Câu 14. cho biết kết quả của biểu thức (1>3) && (2>=2)

A. 1 B. TRUE C. FALSE D. 0

Câu 15. lệnh randomize() nằm trong thư viện nào sau đây: A. dos.h B. stdio.hC. conio.h D. không thuộc các trường hợp trên

Câu 16. Cho biết kết quả xuất ra của chương trình sau đây trên màn hình là gì?

void fun(int & a, int b)

{

a += 20;

Page 5: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

b += 30;

}

void main()

{

int x = 10, y = 50;

fun(x, y);

cout << x << " " << y ;

getch();

}A. 10 50 B. 10 80 C. 30 50 D. 30 80

Câu 17. Cho đoạn mã sau:

void G(int &x, float y)

{

x = x+1;

y = x +1;

}

void main()

{

int n = 10;

float z = 10.5;

G(n, z);

cout<<"Ket qua"<<n<<z;

}

Kết quả in ra của n và z là:A. 11 và 12 B. 10 và 10.5 C. 11 và 10.5 D. 10 và 12

Câu 18. cho biết dòng lệnh nào sẽ bị báo lỗi trong đoạn chương trình sau :

void main()

{

Page 6: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

(1) clrscr();

(2) int a,b,c;

(3) cout << " Nhap vao 2 so nguyen a, b ";

(4) cin>>a>>b;

(5) c = a/b;

(6) cout << " Ket qua la : " << c;

} A. không có đáp án nào sai B. Dong (4) C. Dong (3) D.

Dong (1) Câu 19. Cho biết kết quả xuất ra của chương trình sau đây trên màn hình là gì?

int x = 1;

if ( x > 0 ) x = x + 2;

else x = x + 3;

cout << x;A. 6 B. 1 C. 5 D. 3

Câu 20. cho biết kết quả của đoạn chương trình sau:

int a=3,b=0;

b=--a; //b=2 a=2

b=b+--a; //b=3 a=1

cout<<b--; A. 1 B. 4 C. 3 D. 2

Câu 21. Để viết hàm không trả về kết quả cho hàm tính diện tích s hình tròn khi cho bán kính r ta viết dòng tiêu đề hàm như sau:

A. float Tinh_DT(float r, float &s); B. void Tinh_DT(float r, float s);

C. void Tinh_DT(float r, float &s); // s phai la tham bien &s

D. int Tinh_DT(float r, float &s);

Page 7: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

Câu 22. Chọn khẳng định đúng nhấtA. Cả ba khẳng định đều sai.B. Trong C++ cho phép viết các hàm cùng tên nhưng danh sách tham số

khác nhauC. Trong C++ không cho phép viết các hàm cùng tên mặc dù danh sách

tham số khác nhauD. Trong C++ cho phép viết các hàm cùng tên và danh sách tham số như

nhau Câu 23. cho biết kết quả của đoạn chương trình sau:

int a=241; // % ; chia lay du // “/” : lay nguyen

cout<<(a%100)/10; A. 2 B. 0 C. 4 D. 1

Câu 24. Cho biết kết quả của chương trình sau:

void main()

{

float a=1.2;

int b=a;

cout<<b;

}A. chương trình không in gì B. 1 C. 1.2

D. chương trình có lỗi

Câu 25. cho biết kết quả của biểu thức sqrt(4)+abs(12-16)-pow(2,3) //pow(2,3)=2^3 : ham mu 2^3=8

A. -10 B. -2 C. 4 D. 21

Câu 26. Trong ngôn ngữ C++ để cấp phát bộ nhớ cho một con trỏ có thể dùng hàm hay toán tử:

A. calloc B. new C. cả ba hàm trên D. malloc Câu 27. Để viết hàm nhập giá trị cho một biến cấu trúc phân số (PS) ta khai báo tiêu đề hàm như sau:

A. float NhapPS(PS &p);

Page 8: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

B. float NhapPS(PS p); C. void NhapPS(PS &p); // khong co gia tri tra ve la kieu void D. void NhapPS(PS p); Câu 28. cho biết kết quả của biểu thức (5/3+1)%4

A. 1 B. 3 C. 0 D. 2 Câu 29. cho biết kết quả của đoạn chương trình sau:

int a=3,b=0;

b=a++;

b=b+++a;

cout<<b; A. 7 B. 5 C. 6 D. 8

Câu 30. cho biết kết quả của đoạn chương trình sau:

int a=0,b=4;

int t=((a!=0)?1:b==0)?0:-1;

cout<<t; A. 4 B. 1 C. -1 D. 0

Câu 31. lệnh nào sau đây sẽ nhập số từ bàn phímA. cả hai phương án đều sai B. scanfC. cin D. cả hai phương án đều đúng

Câu 32. Cho biết khai báo tiêu đề hàm nào viết sai?A. int F(int x , float y , char s []= "abc");

B. void F(int x , float y =1, char chr='A');C. void F (int x, float y, char *s);

D. int F(int x = 0, float y = 1, char ch);// voi nhung ham khoi gan mac dinh la khoi gan tu ben phai sang

Page 9: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

Câu 33. Cho biết giá trị của a,b,c sau khi đọan chương trình được thực thi.

int bla(int x, int &y)

{

x = x+y;

y = 7;

return y;

}

void main()

{

int a,b,c;

a = 1;

b = 2;

c = bla(a,b);

}A. a = 3 b = 7 c= 7 B. a = 1 b = 7 c= 7 C. a = 3

b = 1 c= 1 D. a = 1 b = 2 c= 7 Câu 34. Khi chạy chương trình :

main()

{

int a, b, c, n ;

n=889;

a=n/100;

b=(n%100)/10;

c=(n%100)%10;

cout<< a<<b<<c;

Page 10: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

getch();

}

Kết quả in ra :A. 889 B. 25 C. 16 D. 9

Câu 35. Chọn câu lệnh sai:A. cout.width(5); cout<<x; B. cout.width(5); cout>>x;C. cout.precision(2);cout<<x; D. cả ba phương án đều sai.

Câu 36. Trong C++ ta có thể khai báo ở:

A. Cả hai phương án trên đều đúng B. Cả hai phương án trên đều sai

C. Bất kỳ vị trí nào trong một phạm vi cho trước D. Phải khai báo ở đầu của phạm vi Câu 37. Để đa năng hóa các toán tử, các đối tượng có thể là:

A. cấu trúc và cả các kiểu dữ liệu khác B. lớp (class)C. cấu trúc (struct) D. cấu trúc và lớp

Câu 38. Cho biết kết quả của chương trình sau

void main()

{

int a[][4]={1,2,3,4,5,6,7,8,9};

for (int i=0;i<4;i++)

cout<<a[1][i]<<" ";

getch();

}A. 5 6 7 8 B. 4 5 6 7 C. 1 2 3 4 D. 5 7 8 9

Page 11: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

Câu 39. Cho đoạn mã sau:

void H( char &ch, int x)

{

if (ch = ='A') ch = 'B';

else ch = 'C';

x ++;

}

void main()

{

char c = 'a'; int n = 3;

H(c,n);

cout<< c<<" "<<n;

}

Khi chạy chương trình dòng in đậm trên in ra kết quả:A. C 4 B. C 3 C. a 3 D. B 3

Câu 40. Hãy cho biết giá trị của x sau khi thi hành chương trình sau:

void main()

{

float a[5] = {5, 4, 3, 2, 1};

float x;

int i;

for (i = 0; i < 5; i++)

a[i] += a[0];

x = a[1] + a[4];

}A. 5 B. 15 C. 100 D. 25

Câu 41. Biến kiểu char(ký tự) lưu trữ được bao nhiêu ký tự:A. 1 B. 2 C. 4 D. 3

Câu 42. Cho biết kết quả xuất ra của chương trình sau đây trên màn hình là gì?

int x = 7;

switch (x)

{

case 6: cout << "hello." << endl; break;

Page 12: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

case 7: cout << "good morning." << endl; break;

case 8: cout << "good afternoon." << endl;

}A. Không xuất ra gì cả trên màn B. hello C. good morningD. good afternoon.

Câu 43. Cho khai báo hàm sau: void NhapDL( float x, int y, int z = 10)

Chọn cách gọi hàm đúng trong các cách gọi hàm sau: A: NhapDL(2.5);B. NhapDL();C.NhapDL(2.5, 3);D. NhapDL(2.5, 5.5, 8);

Câu 44. Cho đoạn chương trình sau:

if (i == j) {

cout << "A" << endl;

}

else if ((i % j) < 3) {

cout << "B" << endl;

}

else if (i < (j-1)) {

cout << "C" << endl;

}

else {

cout << "D" << endl;

}

Nếu i =4 và j = 9, kết quả xuất ra màn hình sẽ là?A. D B. B C. A D. C

Câu 45. Cho khai báo biến :

Page 13: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

int m,n; float x,y;

Lệnh nào sai:

A. n=6.7; B. y=10.5; C. m=-9; D. x=3; Câu 46. Khẳng định nào Sai: trong C++,

A. để mở một tập tin cũ, gõ phím F1B. để lưu chương trình lên đĩa, gõ phím F2 hoặc chọn lệnh File/SaveC. để tìm lỗi cú pháp của chương trình, gõ phím Alt_F9 hoặc chọn lệnh

Compile/ CompileD. để chạy chương trình, gõ phím Ctrl-F9 hoặc chọn lệnh Run/Run

Câu 47. cho biết kết quả của đoạn chương trình sau: int a=4,b=3;

int t = a <= b ? a:b;

cout<<t;A. 4 B. 2 C. 1 D. 3

Câu 48. Chọn tên đặt sai, trong các tên sau:A. tong_day_so B. TONGDAYSO C. Tongdayso D.

tong day so Câu 49. Chọn các phát biểu đúng trong các phát biểu sau:

A. Các phương thức của lớp có thể có đối hoặc không có đối.B. cả hai đáp án đều saiC. Giá trị trả về của phương thức trong một lớp có thể có kiểu bất kỳ

(kiểu chuẩn và ngoài chuẩn).D. cả hai đáp án đều đúng

Câu 50. Cho biết kết quả của chương trình sau:

void main()

{

clrscr();

int a=1,b=2;

Page 14: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

if (a<b)

if (a>b) a=a+1;

else b=b+1;

else a=a+b;

cout<<a*b;

getch();

}A. 3 B. 12 C. 6 D. 1

Câu 51. Cho đọan lệnh sau đây, giả sử x và y là các biến kỉểu int có gía trị tương ứng là 3 và 9.

if (y > 0) x = x * y;

else if (y < 4) x = x - y;

Sau khi thực thi, giá trị của x sẽ là bao nhiêu?A. 6 B. 9 C. 3 D. 27

Câu 52. Cho biết kết quả xuất ra của chương trình sau đây trên màn hình là gì?

int n;

n = (1/3)*3;

cout << n;A. 0 B. 1 C. 9 D. 3

Câu 53. Cho biết giá trị của x=15/-4 và y=15%-4A. x=-3, y=3 B. x=3, y= 3 C. x=-3, y=-3 D. x=3, y=-3

Câu 54. Chọn phát biểu sai:A. Dấu cách là một ký tự trong tập ký tự của ngôn ngữ C++, nó dùng để

tách các từ.

B. Dòng chú thích là một lệnh trong chương trình.C. Mỗi chữ cái, chữ số hoặc ký hiệu được gọi là một ký tự (character)

trong ngôn ngữ C.D. Ngôn ngữ C++ không dùng chữ có dấu Tiếng Việt.

Câu 55. Biểu thức nào sau đây có giá trị bằng 0:

Page 15: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

A. (4 + 2 > 5) && (2 < 4 / 2) B. ( 10>7 ) && ('a' < 'A' )C. 3 * (2+ 1) >= 10 % 4* 2 D. (3 + 2 <= 5) || (2 < 4 % 2)

Câu 56. Giả sử có con trỏ p: int *p;

Để giải phóng vùng nhớ trỏ bởi con trỏ p ta viết:A. delete *p; B. delete p; C. delete ->p; D. delete p*;

Câu 57. Cho biết giá trị của của các biến sau khi đọan chương trình trên được thực thi?

x=9;

y = 3;

x = ++y; A. x = 4, y = 4; B. x = 3, y = 4; C. x = 9, y = 4; D. x = 10, y = 4;

Câu 58. Hãy chọn các khẳng định đúng trong các khẳng định sau:A. Một chương trình hướng đối tượng sẽ bao gồm các lớp có quan hệ

với nhau.B. Lập trình hướng đối tượng là sự mở rộng của lập trình cấu trúc bằng

cách đưa thêm các phương thức (method).C. Lập trình hướng đối tượng không có sự kế thừa từ lập trình cấu trúc.D. Lớp có thể xem như sự kết hợp của các thành phần dữ liệu và các

hàm. Câu 59. Viết hàm DoiCho để hoán đổi giá trị hai số thực x và y ta khai báo dòng tiêu đề như sau:A. void DoiCho(float &x, float &y); B. void DoiCho(float x, float &y);

C. void DoiCho(float x, float y); D. void DoiCho(float &x, float y); Câu 60. Trong C++, nếu muốn dùng lệnh xóa màn hình thì phải khai báo câu lệnh tiền xử lý thư viện nào:

A. <iostream.h> B. <conio.h> C. không khai báo gì cả

D.<stdio.h>

Câu 61. cho biết kết quả của đoạn chương trình sau:

int a=3,b=4;

Page 16: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

int t=a;

a=b;

b=t;

cout<<b;A. 3 B. 4 C. 2 D. 0

Câu 62. Cho đoạn chương trình sau:

void main()

{

int x=7,y=45,z=63,min_num;

if (x<z) min_num=x;

else min_num=z;

if(y<z) min_num=y;

else min_num=z;

cout<<"The minimum is:" <<min_num;

}

Kết quả của đoạn chương trình trên là:A. The minimum is 63 B. Các câu trả lời

khác đều saiC. The minimum is 45 D. The minimum is 7

PHẦN II: LỚP

Câu 1. Cho khai báo thành phần của lớp A như sau, chọn câu trả lời đúng:class A{ private: int a;public: A(int b) { a=b; }

Page 17: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

};void main(){ A x; // Khai báo 1 vi trong lop A da dinh nghi ham cau tu A y(10); // Khai báo 2}

A. Cả 2 khai báo hợp lệ. B. Lỗi ở dòng (2). C. Lỗi ở cả hai dòng khai báo. D. Lỗi ở dòng (1). Nguyên tắc: Mọi lớp đều có một hàm cấu tử mặc định. Nếu không định nghĩa hàm cấu tử Câu 2. Chọn các phương án đúng cho mệnh đề sau:Trong các phương thức của lớp dẫn xuất, có thể truy nhập trực tiếp tới:

A. Các thuộc tính của các đối tượng thành phần. B. Các thuộc tính trong chính phương thức đó.

C. Các thuộc tính của lớp cơ sở. D. Các thuộc tính mới khai báo trong lớp dẫn xuất.

Câu 3. Để xây dựng hàm tạo sao chép ta viết dòng tiêu đề như sauA. Tên_Lớp ( Tên_lớp & tham_số);

B. Tên_Lớp (const Tên_lớp & tham_số);C. int Tên_Lớp (const Tên_lớp & tham_số);

D. void Tên_Lớp (const Tên_lớp & tham_số); Câu 4. Giả sử cho các lớp như trong khai báo dưới đây. Chỉ ra kết quả hiển thị của đoạn chương trình viết dưới đây:class A{ float x;public: A(){ x=1.5; } void funcA() { cout<<x; }};

Page 18: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

class B: private A{ float y;public: B(): A(){ y=2.5; } void funcA() { A::funcA(); cout<<y; }};void main(){ B *dt2=new B; dt2->funcA();}

A. x = 1.5 và y = 2.5 B. x= 1.5 và y không xác định. C. Giá trị của x và y là không xác định. D. x không xác định và y = 2.5

Câu 5. class A là bạn của class B, class B là bạn của class CA. class C có thể truy xuất đến các thành viên private của class AB. class B có thể truy xuất đến các thành viên private của class CC. class B có thể truy xuất các thành viên của class AD. class A có thể truy xuất các thành viên private của class C

Câu 6. Cho biết khẳng định đúng nhất trong các khẳng định sau:A. Hàm bạn của lớp có thể truy xuất (gọi) đến các thành phần private

của lớpB. Cả hai đáp án đều đúng.C. Cả hai đáp án đều sai.D. Phương thức của lớp có thể truy xuất (gọi) đến các thành phần

private của lớp Câu 7. Toán tử nào có thể được viết lại trong C++

A. :: (toán tử xác định phạm vi) B. ?: (toán tử điều kiện)

Page 19: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

C. sizeof (toán tử xác định kích thước dữ liệu) D. = (toán tử gán) Câu 8. Cho biết kết quả hiển thị của đoạn chương trình sau?class A{ int a,b;public: A() { a=5; b=10; } static void hien() { cout<<"a="<<a<<";b="<<b; }};static A::b=15void main(){ A a; a.hien();}

A. a=5;b=0; B. Chương trình có lỗi, không thể hiển thị kết quả.

C. a=5;b=15; D. a=5;b=10;

Câu 9. Chọn các phát biểu đúng trong các phát biểu sau:A. Mỗi đối tượng sau khi khai báo sẽ được cấp phát một vùng nhớ riêng

để chứa các thuộc tính của chúng.B. Một lớp (sau khi định nghĩa) có thể xem như một kiểu đối tượng và

có thể dùng để khai báo các biến, mảng đối tượng.C. Thuộc tính của lớp có thể có kiểu của chính lớp đó.D. Mỗi đối tượng sau khi khai báo sẽ được cấp phát một vùng nhớ riêng

để chứa các phương thức của chúng.

Câu 10. Khi đa năng hóa toán tử nhập (trích dòng) cho lớp SP ta khai báo dòng tiêu đề như sau:

A. friend istream & operator >>(istream & istr, SP &a);B. friend void istream & operator >>(istream & istr, SP &a);

Page 20: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

C. friend istream & operator >>(istream & istr, SP a);D. friend istream & operator >>(istream istr, SP &a);

Câu 11. Chọn khẳng định đúngA. Kiểu dữ liệu lớp (class) là sự mở rộng của kiểu cấu trúc là có thêm

thành phần hàm.B. Cả ba phương án đều đúng.C. Kiểu dữ liệu lớp (class) giống hệt như kiểu cấu trúc (struct).D. Kiểu dữ liệu lớp (class) là kiểu sẵn có.

Câu 12. Chỉ ra các dòng lệnh nào sai trong đoạn chương trình viết dưới đây?class A{ int a;public: A(int k) { a=k; }};void main(){ int n=2; A *a,*b; a=new A(10); // dòng 1 b=new A[n]; // dòng 2}

A. Cả hai dòng đều đúng. B. Dòng 1 sai. C. Cả hai dòng đều sai. D. Dòng 2 sai. Câu 13. Cho biết kết quả hiển thị của đoạn chương trình sau?class A{ int a;public:A() { a=5;}

Page 21: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

A(int k) { a=k; }void hien(){ cout<<"a="<<a;}};void main(){ A a[3]={A(10),A(20)};a[2].hien();}

A. a=10; B. a=5 C. a=20; D. Chương trình có lỗi, không thể hiển thị kết quả.

Câu 14. Khi đa năng hóa toán tử xuất (chèn dòng) cho lớp SP ta khai báo dòng tiêu đề như sau:

A. friend void operator <<(ostream & ostr, SP a);B. friend ostream & operator <<(ostream ostr, SP &a);C. friend ostream & operator <<(ostream & ostr, SP a);D. friend ostream operator <<(ostream & ostr, SP a);

Câu 15. Phát biểu nào sau đây là đúng trong đa năng hóa toán tử (operator loading)

A. Có thể thay đổi số lượng tham số của các toán tửB. Có thể định nghĩa thêm toán tử mới ngoài những toán tử đã có trong

C++C. Có thể thay đổi kết quả thực hiện của các toán tử trên các kiểu dữ

liệu cơ sởD. Không thể thay đổi độ ưu tiên của các toán tử

Câu 16. Cho biết giá trị in ra của a.n?class A{ public: static int n;

Page 22: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

};int A::n=10;void main(){ A a; cout<<++a.n;}

A. Lỗi, không in được a.n. B. 12. C. 11. D. 10.

Câu 17. Cho khai báo thành phần của lớp A như sau, cho biết kết quả hiện thị khi chạy đoạn chương trình?class G{ protected: int a,b;public: void hien() { cout<<"a="<<a<<";b="<<b;} G(){a=b=10;} G(int k1,int k2=8) { a=k1; b=k2;}};G a(5);G b(a) ;b.hien();

A. a=10; b=8 B. a=10; b=5 C. a=10; b=10 D. a=5; b=8

Câu 18. Hàm mà bất kỳ lớp nào cũng cóA. Contructor B. Hàm friend C. Không có hàm nào cả D. Hàm ảo

virtual Câu 19. Khi đa năng hóa toán tử với các đối tượng là lớp mà các thuộc tính được khai báo là private thì:

A. Cả ba phương án đều sai

Page 23: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

B. Dùng hàm thông thường cũng giống như dùng hàm bạnC. Dùng hàm bạn hoàn toàn giống như dùng phương thứcD. Dùng hàm bạn khác về cách viết và số lượng đối số so với dùng

phương thức

Câu 20. Phát biểu nào sau đây là saiA. Một lớp luôn luôn có hàm destructorB. Hàm destructor có thể là một hàm ảoC. Hàm destructor dùng để hủy vùng nhớ đã cấp cho con trỏ thisD. Các đáp án trên đều không đúng

Câu 21. Cho khai báo thành phần của lớp A như sau, chọn câu trả lời đúng:class A{ int x; A(){ x=0;}};void main(){ A a ; // dòng 1 tai vi ca ba dong deu duoc khai bao mac dinh private A *b; // dòng 2 A *c[10]; // dòng 3}

A. Lỗi ở dòng 3. B. Cả 3 khai báo là hợp lệ.C. Lỗi ở dòng 1. D. Lỗi ở cả 3 dòng.

Câu 22. Cho 2 lớp:class B

Page 24: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

{ public: void show();};class A : public B{public: void show();};Khi đó, nếu MyA là một đối tượng lớp A, muốn thực hiện phương thức show của lớp B thì câu lệnh nào dưới đây là chấp nhận được?

A. MyA.B.show(); B. MyA.B::show();

C. B::MyA.show(); D. MyA.show();

Câu 23. Cho khai báo lớp như sau:class A{ private: int x;protected: float y;public: char z;void hien_thi(){cout<<"Gia tri A la"<<x<<" "<<y<<" "<<z;}};Giả sử trong hàm main co khai báo đối tượng p như sau: A p;Cho biết câu lệnh đúng khi viết trong hàm main:

Page 25: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

A. cin>>p.z; B. cin>>p.y; C. cả ba đáp án đều đúng D. cin>>p.x;

Câu 24. Cho biết khẳng định đúng nhất trong các khẳng định sau:A. Một lớp A có thể là bạn của nhiều lớp.B. Nếu lớp A là bạn của lớp B thì chỉ có một số phương thức của A có

thể truy xuất đến các thành phần riêng của lớp B.C. Cả ba phương án đều đúng.D. Nếu lớp A là bạn của lớp B thì lớp B cũng là bạn của lớp A.

Câu 25. Cho khai báo thành phần của các lớp như sau, chỉ ra lỗi trong phương thức nhap() của lớp HCN?class POINT{ int x,y;public: void nhap();};class HCN{ POINT p; int d,r;public: void nhap() { cout<<"d,r="; cin>>d,r; // dòng 1 cout<<"x,y="; cin>>p.x,p.y; // dòng 2

Page 26: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

}};

A. Lỗi ở dòng 1. B. Lỗi ở dòng 2. C. Lỗi ở cả 2 dòng.D. Không dòng nào lỗi.

Câu 26. Chỉ ra các dòng lệnh nào sai trong đoạn chương trình viết dưới đây?class SUN{protected: int x;public: SUN(int k = 5) { x = k; }};void main( ){ int n=2; SUN *a,*b; a = new SUN(10); // dòng 1 b = new SUN(n); // dòng 2}

A. Dòng 1 sai. B. Dòng 2 sai. C. Cả hai dòng đều sai. D. Cả hai dòng đều đúng. Câu 27. Phát biểu nào sau đây là sai

A. Lớp dẫn xuất có thể khởi tạo giá trị khác cho các thuộc tính có giới hạn public của lớp cơ sở

B. Destructor của lớp cơ sở được gọi sau destructor của lớp dẫn xuấtC. Contructor của lớp cơ sở được gọi trước contructor của lớp dẫn xuấtD. Nếu một lớp dẫn xuất không có cài đặt hàm destructor thì hàm

destructor của lớp cơ sở cũng sẽ không được gọi khi giải phóng đối tượng thuộc lớp dẫn xuất Câu 28. Cho biết khẳng định đúng nhất trong các khẳng định sau:

Page 27: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

A. Hàm bạn giống như các hàm thông thường chỉ khác là có thêm từ khóa friend trong dòng tiêu đề

B. Hàm bạn là thành viên của lớpC. Cả ba phương án đều đúngD. Hàm bạn có một điểm khác duy nhất so với hàm thông thường là

trong thân hàm có thể truy xuất đến các thành phần riêng của lớp. Câu 29. Khi thực hiện đoạn chương trình sau, kết quả in ra là:class some{public: ~some( ){ cout<<"ABC"<<endl; }};void main( ){ some a; a.~some();}

A. ABC B. ABCABCC. Chương trình thực thi mà không in gì cả D. Chương trình báo

lỗi Câu 30. Cho đoạn mã sau:class sinhvien{private: char hoten[25]; int namsinh;public: nhap() { cout<<"Nhap ho ten sinh vien:"; gets(hoten); cout<<"Nam sinh: "; cin>>namsinh;

Page 28: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

}};void main(){ sinhvien s; cout<<"Nhap thong tin cho sinh vien :"; s->nhap();}Gạch chân dòng lệnh sai trong hàm main và sửa lại

Câu 31. Cho biết khẳng định đúng nhất trong các khẳng định sau:A. Cả hai phương án đều đúng. B. Hàm tạo có thể xây dựng bên trong

hoặc ngoài lớp.C. Trong một lớp (class) có thể có nhiều hàm tạo. D. Cả hai phương án

đều sai. Câu 32. Cho biết khẳng định đúng nhất trong các khẳng định sau:

A. Để khai báo đối tượng hằng ta cần viết hàm tạo để khởi gán giá trị cho các thuộc tính của đối tượng

B. Ta không cần viết hàm tạo nếu cần khai báo đối tượng hằngC. Cả ba phương án đều saiD. Ta có thể viết hoặc không viết hàm tạo khi khai báo đối tượng hằng

tuy thuộc từng trường hợp Câu 33. Để đa năng hóa toán tử (nạp chồng toán tử) + và - đối với lớp số phức ta viết:class SP{private: float thuc, ao;public: 1: SP operator + (SP b); 2: friend SP operator - (SP a, SP b);....};Cho biết cách khai báo 2 dòng 1 và 2 là đúng hay sai?

Page 29: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

A. Cả dòng 1 và dòng 2 đều đúngB. Dòng 1 đúngC. Cả dòng 1 và dòng 2 đều sai D. Dòng 2 đúng

Câu 34. Cho biết kết quả hiển thị của đoạn chương trình sau?class A{ static int a,b;public: A() { a=5; b=10; } static void hien() { cout<<"a="<<a<<";b="<<b; }};int A::a=15, A::b=20;void main( ){ A a; a.hien();}

A. a=15; b=20; B. Chương trình có lỗi, không thể hiển thị kết quả.

C. a=5; b=20; D. a=5; b=10; Câu 35. Khi thực hiện đoạn chương trình sau, kết quả là gìclass BaseA{protected: int A;public: BaseA( ){ A=5}; void Print( ){ cout<<"A ="<<A<<endl; };class BaseB{protected: int B;public: BaseB(){ B = 10; } void Print( ){ cout<< "B="<<B<<endl;}};

Page 30: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

class Derive: public BaseA, public BaseB {};void main(){ d.BaseA::Print( );}

A. Màn hình xuất hiện A = 5 B = 10 B. Chương trình báo lỗi

C. Màn hình xuất hiện A = 5 D. Màn hình xuất hiện B = 10 Câu 36. Để che dấu thành phần của lớp so với bên ngoài và các lớp dẫn xuất ta dùng thuộc tính truy xuất là:

A. public B. protected C. cả ba đáp trên đều đúng D. private Câu 37. Chỉ ra khai báo lỗi cho các khai báo đối tượng dưới đây:class A{protected:

A(int i);};class B : public A{ public: B(){}};A a(10); // dòng 1B b; // dòng 2

A. Dòng 1 lỗi. B. Cả hai dòng đều lỗi C. Dòng 2 lỗi.D. Không có dòng nào lỗi.

Câu 38. Cho biết khẳng định đúng nhất trong các khẳng định sau:A. Trong thân hàm bạn có thể dùng con trỏ this. B. Cả hai phương án

đều sai.C. Cả hai phương án đều đúng D. Hàm bạn là một phương thức đặc

biệt của lớp Câu 39. Cho khai báo lớp:

Page 31: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

class A{private: int x;public: void nhap_dl();};Khi định nghĩa hàm nhap_dl ngoài lớp ta viết như sau:

A. void A::nhap_dl() {cout<<"Nhap n="; cin>>n;} B. void nhap_dl() {cout<<"Nhap n="; cin>>n;}

C. A::void nhap_dl() {cout<<"Nhap n="; cin>>n;} D. Cả ba đáp án đều sai Câu 40. Khi thực thi đoạn chương trình sau, kết quả là gì?class Phanso{private: int tuso,mauso;public: Phanso( int t=0, int m=1) { tuso = t; mauso = m; cout<<"("<<tuso<<"/"<<mauso<<")"<<endl; } Phanso( const Phanso &x) { tuso = x.tuso; mauso = x.mauso; cout<<"("<<tuso<<"/"<<mauso<<")"<<endl; } Phanso operator++(int ) { Phanso old=*this;

Page 32: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

tuso += mauso; return old; }};int main(){ Phanso x(1,2); Phanso y=x++; getch();}

A. Kết quả in ra là (1/2) (1/2) (1/2) B. Kết quả in ra là (1/2) (1/2)

C. Chương trình bị lỗi khi biên dịch D. Kết quả in ra là (1/2) (3/2) Câu 41. Chọn các phát biểu đúng trong các phát biểu sau:

A. Cả ba lựa chọn đều đúngB. Hàm tạo có thể có đối hoặc không có đối.C. Hàm tạo có thể được xây dựng bên trong hoặc bên ngoài định nghĩa

lớp.D. Trong một lớp có thể có nhiều hàm tạo.

Câu 42. Cho khai báo thành phần của lớp PS như sau, chỉ ra lỗi cho các khai báo lớp PS?class PS{ int t,m;public: PS(int t1=1,int m1=1) { t=t1; m=m1;}};PS ps1; // dòng 1PS ps2[100]; // dòng 2PS *ps3[100]; // dòng 3

A. Lỗi ở dòng 2 B. Lỗi ở dòng 1

Page 33: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

C. Lỗi ở dòng 3 D. Cả 3 khai báo là hợp lệ. Câu 43. Cho khai báo thành phần của lớp A như sau, chỉ ra kết quả?class A{ private: int k;public: A(){} A(int x=10){ k=x; } void hien() { cout<<"k="<<k; }};void main(){ A a; // dòng 1 a.hien(); // dòng 2}

A. Không có lỗi, hiện k không xác định. B. Lỗi ở dòng 1 C. Không lỗi, hiện k=10 D. Lỗi ở dòng 2

Câu 44. Khi thực thi đoạn chương trình sau kết quả sẽ là :class Base{

public: int xVal; Base(int x=0) : xVal(x){

cout<<"xVal = "<<xVal<<endl; }}; class Derive:Base {public: Derive(){xVal = 10;}

Page 34: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

void Print(){ cout<<"xVal = "<<xVal<<endl;}};void main(){ Derive d; d.Print();}

A. Màn hình xuất hiện: xVal = 10 B. Màn hình xuất hiện: xVal = 0

C. Chương trình bị lỗi. D. Màn hình xuất hiện: xVal = 0 xVal = 10 Câu 45. Cho biết khẳng định đúng trong các khẳng định sau:

A. Trong nội bộ một lớp có duy nhất một con trỏ this B. Cả ba khẳng định trên đều sai.

C. Trong nội bộ một lớp không có con trỏ this nào.D. Trong nội bộ một lớp có thể có nhiều con trỏ this Câu 46. Viết hàm tạo của một lớp để:

A. Để giải phóng vùng nhớ cho các thuộc tính là con trỏB. Khởi gán giá trị cho các thuộc tính của lớp hoặc cấp phát vùng nhớ

cho các thuộc tính là con trỏ.C. Không để làm gì cả.D. Cả ba phương án đều sai

Câu 47. Cho biết kết quả đoạn chương trình sauclass a{public: void fun(){ cout<<"class a";} };class b: public a{public:

Page 35: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

void fun(){ cout<<"class b";}};int main(){ a *obj = new b(); obj->fun(); getch();}

A. class a class b B. Chương trình báo lỗi C. class b D. class a Câu 48. Cho biết giá trị hiển thị của đoạn chương trình?class A{ int *n;public: A() { n = new int; *n=10;} void hien() { cout<<*n;} int tang(int k) { *n=*n+k; return *n;}};void main(){ A a; A b(a) ; a.tang(1); b.hien();}

A. 0 B. 10 C. Chương trình có lỗi khi biên dịch.D. 11

Câu 49. Cho khai báo dưới đây, nếu MyA là một đối tượng của lớp A, câu lệnh nào sau đây là chấp nhận được:class B{

Page 36: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

int x;public: int getX();};class A : protected B{};

A. Cả hai lựa chọn đều saiB. MyA.getX(); C. MyA.x;D. Cả hai lựa chọn đều đúng

Câu 50. Giả thiết cho khai báo lớp SP (số phức) như sau:class SP{ private: double a; // phần thực double b; // phần ảopublic: SP cong(SP u2) { SP u: u.a = this->a + u2.a ; u.b = this->b + u2.b ; return u; }} ;Lời gọi nào dưới đây là không hợp lệ?SP u, u1, u2;u = u1.cong(u2); // dòng 1u = cong(u1,u2); // dòng 2

A. Lỗi ở dòng 2. B. Lỗi ở dòng 1. C. Lỗi ở cả hai dòng. D. Cả 2 dòng đều hợp lệ. Câu 51. Khi thực thi đoạn chương trình sau, kết quả sẽ là:class Base{public: Base() { cout<<"Base class"<<endl; }

Page 37: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

};class Derive: Base{ public: Derive() {cout<<"Derive class"<<endl;}};void main(){ Base b; Derive d;}

A. Derive class Base class B. Base class Base class Derive class

C. Base class Derive class Base class D. Base class Derive class Câu 52. Để xây dựng toán tử gán ta viết dòng tiêu đề như sau:

A. Cả hai phương án đều đúngB. Cả hai phương án đều saiC. const Tên_Lớp & operator = (const Tên_Lớp & tham_số);D. void operator = (const Tên_Lớp & tham_số);

Câu 53. Cho khai báo thành phần của lớp A như sau, cho biết giá trị thuộc tính n của đối tượng a1?class A{ int n;public: A(int k=10) { n=k;} int &gt() { return n; }};A a1,a2(3);a1.gt()=a2.gt();

A. Cả 3 phương án trên đều sai.B. a1.n = 10 C. a1.n = 0 D. a1.n = 3

Page 38: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

Câu 54. Cho biết khẳng định đúng nhất trong các khẳng định sau:A. Cả hai phương án đều saiB. Hàm tạo sao chép tạo ra đối tượng mới giống đối tượng đã choC. Hàm tạo sao chép tạo ra đối tượng mới độc lập với đối tượng đã choD. Cả hai phương án đều đúng

Câu 55. Chọn các phát biểu đúng trong các phát biểu sau:A. Các phương thức của lớp có thể có đối hoặc không có đối.B. Giá trị trả về của phương thức trong một lớp có thể có kiểu bất kỳ

(kiểu chuẩn và ngoài chuẩn).C. cả hai đáp án đều saiD. cả hai đáp án đều đúng

Câu 56. Cho biết giá trị hiển thị của đoạn chương trình?class A{ int *n;public: A() { n=new int;*n=10;} void hien() { cout<<*n;} int tang(int k) { *n = *n + k; return *n;} A(const A &a) { n = new int; *n = *a.n; }};void main(){ A a; A b(a); a.tang(5); b.hien();}

Page 39: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

A. 10 B. Chương trình có lỗi khi biên dịch. C. 0D. 15

Câu 57. Phát biểu nào sau đây là saiA. Mỗi lớp chỉ có duy nhất một hàm destructor B. Hàm constructor

không thể là một hàm ảo.C. Một lớp có thể có nhiều hàm constructor D. Hàm destructor

không thể là một hàm ảo. Câu 58. Chỉ ra các dòng lệnh nào sai trong đoạn chương trình viết dưới đây?class A{ int a;public: A(int k=5) { a = k; }};void main(){ int n=2; A *a,*b; a = new A(10); // dòng 1 b = new A(n); // dòng 2}

A. Dòng 1 sai. B. Cả hai dòng đều sai. C. Cả hai dòng đều đúng. D. Dòng 2 sai. Câu 59. Cho khai báo thành phần của lớp A như sau, cho biết kết quả hiện thị khi chạy đoạn chương trình?class A{ int x,y;public: A(){ x = y = 10; }

Page 40: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

A(int d1,int d2=20) { x=d1; y=d2;} void hien() { cout<<"x="<<x<<";y="<<y;}};A a(15);A b(a);b.hien();

A. x=10; y=15 B. x=15; y=20 C. x=10; y=10 D. x=20; y=20 Câu 60. Cho biết khẳng định đúng nhất trong các khẳng định sau:

A. Cả hai khẳng định đều đúngB. Hàm tạo sao chép là phương thức của lớp tạo ra đối tượng giống và

độc lập với đối tượng đã choC. Hàm tạo sao chép có kiểu trả vềD. Cả hai khẳng định đều sai

Câu 61. Cho đoạn chương trình sau:class A { public: int x,y; };class B: protected A { public: int z; };void main(){ B b; b.x = 0; // Lệnh L1 b.y = 0; // Lệnh L2 b.z = 0; // Lệnh L3}Phát biểu nào sau đây là đúng:

A. Lệnh L1, L3 là sai. Lệnh L2 đúng B. Lệnh L2, L3 là sai. Lệnh L1 đúng

C. Cả 3 lệnh L1, L2, L3 đều sai. D. Lệnh L1, L2 là sai. Lệnh L3 đúng. Câu 62. Cho biết kết quả hiển thị của đoạn chương trình sau?class A

Page 41: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

{ int a; static int b;public: A() { a=5; b=10; } void hien() { cout<<"a="<<a<<"; b="<<b; }};void main(){ A a;a.hien();}

A. Chương trình có lỗi, không thể hiển thị kết quả. B. a=0;b=10; C. a=5;b=0; D. a=5;b=10;

Câu 63. Giới hàn truy xuất nào chỉ có trong các lớp của C++A. protected internal B. private C. friend D. virtual

Câu 64. Cho khai báo thành phần của lớp A như sau, cho biết giá trị thuộc tính n của đối tượng d?class A{ int n;public: A(int k=10) { n=k; }};A d(15);

A. Cả 3 phương án trên đều sai. B. d.n = 15. C. d.n = 0. D. d.n = 10.

Page 42: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

Câu 65. Chọn các khai báo đúng trong khai báo sau:A. class ps{private int tuso; int mauso;};

B. class ps{public: int tuso; int mauso;};

C. class ps{private int tuso; int mauso;}

D. class ps{ private: int tuso; int mauso;}

Câu 66. Hãy chọn các khẳng định đúng trong các khẳng định sau:A. Lập trình hướng đối tượng là sự mở rộng của lập trình cấu trúc bằng

cách đưa thêm các phương thức (method).B. Lớp có thể xem như sự kết hợp của các thành phần dữ liệu và các

hàm.C. Lập trình hướng đối tượng không có sự kế thừa từ lập trình cấu trúc.D. Một chương trình hướng đối tượng sẽ bao gồm các lớp có quan hệ

với nhau. Câu 67. Một trong các tính chất của phương pháp lập trình hướng đối tượng

A. Tính độc lập của các lớp B. Tính kế thừa giữa các lớpC. Tính trừu tượng của một lớp D. Tính chất public của lớp

Câu 68. Chọn đáp án đúngA. Hàm bạn của một lớp là thành viên của một lớp B. Phương thức của

lớp là thành viên của lớpC. Cả ba ý trên đều đúng. D. Hàm thông thường

cũng là thành viên của lớp Câu 69. Kết quả biên dịch - thực thi chương trình sau: class Vidu{ int n;

Page 43: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

void HienThi(){ cout<<n; } Vidu(){ n = 10; }};void main(){

Vidu vd;vd.HienThi();

}A. Lỗi biên dịch. B. Chương trình thực thi xuất ra màn

hình: 10.C. Lỗi thực thi D. Chương trình thực thi mà không

xuất gì ra màn hình. Câu 70. Chọn đáp án đúng nhất. Constructor là :

A. Hàm có tên trùng tên lớp và có dấu ngã '~' trước tên hàm.B. Hàm có tên trùng với tên lớp, kiểu dữ liệu của hàm là voidC. Các hàm có tên trùng với tên lớp và không có tham số.D. Tat ca phuong an deu sai

Câu 71. Hãy chọn khẳng định đúng nhất trong các khẳng định sau:A. Cả hai câu trả lời đều đúngB. Lớp chứa các thành phần dữ liệu và các phương thức (hàm thành

viên).C. Lớp chỉ chứa các thành phần dữ liệu.D. Cả hai câu trả lời đều sai

Câu 72. Chọn các phát biểu đúng trong các phát biểu sau:A. Các phương thức của lớp cơ sở và lớp dẫn xuất có thể trùng tên.B. Cả hai phát biểu đều saiC. Cả hai phát biểu đều đúngD. Các thuộc tính của lớp cơ sở và lớp dẫn xuất có thể trùng tên.

Câu 73. Khai báo nào sau đây là khai báo destructor của lớp UITA. virtual ~UIT( ); B. ~UIT( ) const; C. ~UIT( ) D.

void ~UIT( ); Câu 74. Cho đoạn chương trình sau:class A{ public: int x;};

Page 44: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

class B: protected A{ protected: int y;};class C: private B{private: int z;public: C( ){ x = 1; //Lệnh L1 y = 2; //Lệnh L2 z = 3; //Lệnh L3 }};

A. Lệnh L1 sai, lệnh L2, L3 đúngB. Lệnh L1, L2 sai và lệnh L3 đúngC. Lệnh L1, L2, L3 đều sai D. Lệnh L1, L2, L3 đều đúng

Câu 75. Giả sử cho các lớp như trong khai báo dưới đây. Chỉ ra kết quả hiển thị của đoạn chương trình?class A{ protected: float x;public: A(){ x=1.5; } void funcA() { cout<<"x="<<x; }};class B: private A{ float y;public: B():A(){ y=8.5; } float funcA() { return x+y; }

Page 45: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

};void main(){ B b; cout<<b.funcA();}

A. 8.5 B. Chương trình lỗi, không chạy được. C. 10 D. 1.5

Câu 76. Khi thực thi đoạn chương trình sau kết quả sẽ là:class Phanso{private: int tuso, mauso;public: Phanso( int t = 0, int m = 1) { tuso = t; mauso = m; cout<< "("<<tuso<<"/"<<mauso<<")"<<endl; } void In( ) { cout<<"("<<tuso<<"/"<<mauso<<"/"<<endl; }};void main( ){ Phanso x(1, 0); x.In( );}

A. Chương trình bị lỗi khi biên dịch B. Kết quả in ra là (1/0) (1/0)

Page 46: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

C. Kết quả in ra là (1/0) D. Kết quả in ra là (1/1) Câu 77. Giả sử cho các lớp như trong khai báo dưới đây. Chỉ ra các dòng lệnh nào sai trong chương trình viết dưới đây:class A{ public: void funcA();};class B : private A{};A dt1;B dt2;dt1.funcA(); // dòng 1dt2.funcA(); // dòng 2

A. Dòng 1 sai. B. Cả hai dòng đều đúng.C. Dòng 2 sai. D. Cả hai dòng đều sai. Câu 78. Cho khai báo sau:class DIEM{private: int x, y; Nhap(){ cout<<" Nhap toa do cho diem"; cin>>x>>y; }};DIEM a;Hãy chọn những dòng lệnh đúng

A. cin>>a.x; B. a.Nhap(); C. cin>>a.y; D. Cả 3 câu trả lời đều sai; Câu 79. Giả thiết cho khai báo lớp SP (số phức) như sau:class SP

Page 47: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

{ double a; // phần thực double b; // phần ảopublic: SP tru(SP &u2) { SP u: u.a = this->a - u2.a ; u.b = b - u2.b ; return u; }} ;Lời gọi nào dưới đây là không hợp lệ?SP u, u1, u2;u = u1.tru(u2); // dòng 1u = tru(u1,u2); // dòng 2u = u1-u2; // dòng 3

A. Lỗi ở dòng 2. B. Lỗi ở dòng 3. C. Lỗi ở dòng 1. D. Cả 3 dòng đều hợp lệ.

Câu 80. Khi thực hiện đoạn chương trình sau, kết quả là gì:class UIT{ int nabc;public: UIT( int x = 0 ){ nabc = x; } ~UIT( ) { cout<<" "<<nabc; }};void Func( const UIT&x){ UIT *a1 = new UIT(5); delete a1;}

Page 48: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

void main(){ UIT abc(9); Func(abc); getch();}

A. Xuất ra màn hình 9 9 B. Xuất ra màn hình 5 9C. Xuất ra màn hình 5 5 D. Xuất ra màn hình 9 5 Câu 81. Chọn các phát biểu đúng trong các phát biểu sau:

A. Con trỏ của lớp cơ sở có thể dùng để chứa địa chỉ các đối tượng của lớp dẫn xuất.

B. Một hàm tạo không thể là thành phần static.C. Cả ba phát biểu đều đúngD. Các thành phần static trong một lớp có thể được truy nhập đến ngay

cả khi đối tượng chưa được khai báo. Câu 82. Cho đoạn chương trình:class A { private: int x,y; public: A(int x1, int y1) { x = x1; y=y1; } void In() { cout<<x<<", "<<y; }};void F() { A a(10, 10); a.x += 10; a.y = a.x; a.In( ); }Khi gọi hàm F(), kết quả hiển thị trên màn hình là:

A. Chương trình sẽ báo lỗi do truy cập đến thành phần private của lớp AB. 20, 20 C. 20, 10 D. 10, 10

Câu 83. Contructor của lớp sau thuộc loại constructor nào?class Phanso{private:

Page 49: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

int tuso, mauso;public: Phanso( int tu=0, int mau=1);};

A. Contructor sao chép B. Contructor mặc định C. Contructor ảo D. Không có đáp án nào đúng Câu 84. Giả sử cho các lớp như trong khai báo dưới đây. Chỉ ra các dòng lệnh nào sai trong chương trình:class A{ public: void funcA();};class B : private A{};A dt1;B dt2;dt1.funcA(); // dòng 1dt2.funcA(); // dòng 2

A. Cả hai dòng đều đúng. B. Cả hai dòng đều sai. C. Dòng 1 sai.D. Dòng 2 sai.

Câu 85. Kết quả biên dịch - thực thi chương trình sau: class ABC {

int x, y;public: ABC(int xx=0, int yy = 0){

x= xx ; y= yy ; } void Print(){ cout<< " ("<<x <<","<<y<<" )"; } };void main() {

ABC a(5);a.Print();

Page 50: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

}A. Lỗi do khởi tạo đối tượng a không đúng. B. Hiển thị trên màn

hình (5,5)C. Hiển thị trên màn hình (5,0) D. Hiển thị trên màn hình kết quả khác

Câu 86. Kết quả của đoạn chương trình là gì class A{public: virtal void In(){cout<<"A";}};class B: class A{public: void In(){ cout<<"B"; }};class C: public B{public: void In(){ cout<<"C";}};void main(){ B *pd,b; C c; pb = &b; pb->A::In(); pb->In(); pb = &c; pb->In(); getch();}

A. Chương trình in ra ABC B. Chương trình in ra ABBC. Chương trình báo lỗi D. Chương trình in ra

BBC Câu 87. Cho khai báo thành phần của lớp A như sau, cho biết kết quả hiện thị khi chạy doạn chương trình?class A

Page 51: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

{ int d;public: A(int a=10) { d = a; } A operator ++() { d++; return *this; } void hien() { cout<<"d="<<d; }};A a1;A *a2=&a1;++a1;a2->hien();

A. Chương trình có lỗi. B. Kết quả d=11 C. Kết quả: d=10D. Kết quả: d=0

Câu 88. Cho biết kết quả biên dịch khi thực hiện đoạn chương trình sau: class A{public: virtual void In() = 0;};class B: public A{};class C: public B{public: void In(){cout<<"C";}};int main(){ C c; B *pb = &c; pb->In(); getch();

Page 52: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

}A. Chương trình chạy và không hiển thị kết quả gìB. Chương trình báo lỗi do khai báo biến con trỏ pb thuộc kiểu lớp trừu

tượngC. Chương trình báo lỗi do khai báo biến c là ảoD. Chương trình chạy và in ký tự C trên màn hình

Câu 89. Để đa năng hóa các toán tử, các đối tượng có thể là:A. lớp (class) B. cấu trúc và lớpC. cấu trúc và cả các kiểu dữ liệu khác D. cấu trúc (struct)

Câu 90. Hãy chọn câu đúng: Các từ khoá public và private dùng để:A. Đảm bảo an toàn của lớp khi thiết kếB. Cho phép người thiết kế lớp che giấu một phần thi hành của lớp trước

người sử dụng lớp.C. Trình biên dịch tối ưu hoá chương trìnhD. Cả ba đáp án đều đúng

Câu 91. Cho khai báo thành phần của lớp PS như sau, chỉ ra lỗi cho các khai báo lớp PS?class PS{ int t,m;public: PS() { t=m=1; } PS(int t1, int m1) { t=t1; m=m1; }};PS ps1; // dòng 1PS ps2(1); // dòng 2PS ps3(1,2); // dòng 3

A. Cả 3 khai báo là hợp lệ. B. Lỗi ở dòng 3. C. Lỗi ở dòng 1. D. Lỗi ở dòng 2.

Câu 92. Cho khai báo lớp:class A{private: int x;

Page 53: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

public: void nhap_dl() {cout<<"Nhap n="; cin>>n;} };Cho biết cách gọi đúng phương thức nhap_dl trong chương trình chính khi có khai báo : A p, *q;

A. q->nhap_dl(); B. void nhap_dl(); C. p->nhap_dl();D. nhap_dl();

Câu 93. Điểm khác của hàm tạo so với phương thức thông thường trong một lớp là:

A. Hàm tạo không có kết quả trả về B. Không khai báo kiểu cho hàm tạo

C. Tên hàm tạo trùng với tên lớp D. Cả ba đáp án đều đúng

PHẦN III: KẾ THỪA

Câu 1. Khi thực thi đoạn chương trình sau kết quả sẽ là :class Base{

public: int xVal; Base(int x=0) : xVal(x){

cout<<"xVal = "<<xVal<<endl; }}; class Derive:Base {public: Derive(){xVal = 10;} void Print(){ cout<<"xVal = "<<xVal<<endl;}};void main(){

Page 54: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

Derive d; d.Print();}

A. Màn hình xuất hiện: xVal = 0 xVal = 10 B. Màn hình xuất hiện: xVal = 10

C. Chương trình bị lỗi. D. Màn hình xuất hiện: xVal = 0 Câu 2. Kết quả của đoạn chương trình là gì class A{public: virtal void In(){cout<<"A";}};class B: class A{public: void In(){ cout<<"B"; }};class C: public B{public: void In(){ cout<<"C";}};void main(){ B *pd,b; C c; pb = &b; pb->A::In(); pb->In(); pb = &c; pb->In(); getch();}

A. Chương trình in ra ABC B. Chương trình in ra BBCC. Chương trình in ra ABB D. Chương trình báo lỗi

Câu 3. Chọn các phát biểu đúng trong các phát biểu sau:

Page 55: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

A. Cả hai phát biểu đều đúngB. Các thuộc tính của lớp cơ sở và lớp dẫn xuất có thể trùng tên.C. Các phương thức của lớp cơ sở và lớp dẫn xuất có thể trùng tên.D. Cả hai phát biểu đều sai

Câu 4. Cho đoạn chương trình sau:class A{ public: int x;};class B: protected A{ protected: int y;};class C: private B{private: int z;public: C( ){ x = 1; //Lệnh L1 y = 2; //Lệnh L2 z = 3; //Lệnh L3 }};

A. Lệnh L1 sai, lệnh L2, L3 đúngB. Lệnh L1, L2 sai và lệnh L3 đúngC. Lệnh L1, L2, L3 đều sai D. Lệnh L1, L2, L3 đều đúng

Câu 5. Cho biết kết quả biên dịch khi thực hiện đoạn chương trình sau: class A{public: virtual void In() = 0;};class B: public A{};class C: public B{public:

Page 56: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

void In(){cout<<"C";}};int main(){ C c; B *pb = &c; pb->In(); getch();}

A. Chương trình báo lỗi do khai báo biến con trỏ pb thuộc kiểu lớp trừu tượng

B. Chương trình chạy và in ký tự C trên màn hìnhC. Chương trình báo lỗi do khai báo biến c là ảoD. Chương trình chạy và không hiển thị kết quả gì

Câu 6. Để che dấu thành phần của lớp so với bên ngoài và các lớp dẫn xuất ta dùng thuộc tính truy xuất là:

A. private B. protected C. cả ba đáp trên đều đúng D. public Câu 7. Giả sử cho các lớp như trong khai báo dưới đây. Chỉ ra các dòng lệnh nào sai trong chương trình:class A{ public: void funcA();};class B : private A{};A dt1;B dt2;dt1.funcA(); // dòng 1dt2.funcA(); // dòng 2

A. Cả hai dòng đều sai. B. Cả hai dòng đều đúng.C. Dòng 1 sai. D. Dòng 2 sai. Câu 8. Giả sử cho các lớp như trong khai báo dưới đây. Chỉ ra các dòng lệnh nào sai trong chương trình viết dưới đây:

Page 57: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

class A{ public: void funcA();};class B : private A{};A dt1;B dt2;dt1.funcA(); // dòng 1dt2.funcA(); // dòng 2

A. Dòng 1 sai. B. Cả hai dòng đều sai. C. Dòng 2 sai.D. Cả hai dòng đều đúng.

Câu 9. Khi thực thi đoạn chương trình sau, kết quả sẽ là:class Base{public: Base() { cout<<"Base class"<<endl; }};class Derive: Base{ public: Derive() {cout<<"Derive class"<<endl;}};void main(){ Base b; Derive d;}

A. Base class Derive class B. Base class Derive class Base class

C. Base class Base class Derive class D. Derive class Base class

Page 58: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

Câu 10. Một trong các tính chất của phương pháp lập trình hướng đối tượng

A. Tính trừu tượng của một lớp B. Tính chất public của lớpC. Tính độc lập của các lớp D. Tính kế thừa giữa các lớp

Câu 11. Phát biểu nào sau đây là saiA. Contructor của lớp cơ sở được gọi trước contructor của lớp dẫn xuấtB. Lớp dẫn xuất có thể khởi tạo giá trị khác cho các thuộc tính có giới

hạn public của lớp cơ sởC. Nếu một lớp dẫn xuất không có cài đặt hàm destructor thì hàm

destructor của lớp cơ sở cũng sẽ không được gọi khi giải phóng đối tượng thuộc lớp dẫn xuất

D. Destructor của lớp cơ sở được gọi sau destructor của lớp dẫn xuất Câu 12. Chỉ ra khai báo lỗi cho các khai báo đối tượng dưới đây:class A{protected:

A(int i);};class B : public A{ public: B(){}};A a(10); // dòng 1B b; // dòng 2

A. Cả hai dòng đều lỗi B. Không có dòng nào lỗi.C. Dòng 2 lỗi. D. Dòng 1 lỗi. Câu 13. Cho 2 lớp:class B{ public: void show();

Page 59: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

};class A : public B{public: void show();};Khi đó, nếu MyA là một đối tượng lớp A, muốn thực hiện phương thức show của lớp B thì câu lệnh nào dưới đây là chấp nhận được?

A. B::MyA.show(); B. MyA.B.show(); C. MyA.B::show(); D. MyA.show(); Câu 14. Chọn các phương án đúng cho mệnh đề sau:Trong các phương thức của lớp dẫn xuất, có thể truy nhập trực tiếp tới:

A. Các thuộc tính mới khai báo trong lớp dẫn xuất. B. Các thuộc tính trong chính phương thức đó.

C. Các thuộc tính của các đối tượng thành phần. D. Các thuộc tính của lớp cơ sở. Câu 15. Cho khai báo dưới đây, nếu MyA là một đối tượng của lớp A, câu lệnh nào sau đây là chấp nhận được:class B{ int x;public: int getX();};class A : protected B{};

A. Cả hai lựa chọn đều sai B. Cả hai lựa chọn đều đúng C. MyA.x; D. MyA.getX(); Câu 16. Khi thực hiện đoạn chương trình sau, kết quả là gìclass BaseA{protected: int A;public: BaseA( ){ A=5}; void Print( ){ cout<<"A ="<<A<<endl;

Page 60: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

};class BaseB{protected: int B;public: BaseB(){ B = 10; } void Print( ){ cout<< "B="<<B<<endl;}};class Derive: public BaseA, public BaseB {};void main(){ d.BaseA::Print( );}

A. Màn hình xuất hiện B = 10 B. Chương trình báo lỗiC. Màn hình xuất hiện A = 5 D. Màn hình xuất hiện A = 5 B = 10

Câu 17. Cho đoạn chương trình sau:class A { public: int x,y; };class B: protected A { public: int z; };void main(){ B b; b.x = 0; // Lệnh L1 b.y = 0; // Lệnh L2 b.z = 0; // Lệnh L3}Phát biểu nào sau đây là đúng:

A. Cả 3 lệnh L1, L2, L3 đều sai. B. Lệnh L1, L2 là sai. Lệnh L3 đúng.C. Lệnh L2, L3 là sai. Lệnh L1 đúng D. Lệnh L1, L3 là sai.

Lệnh L2 đúng

Page 61: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

Câu 18. Giả sử cho các lớp như trong khai báo dưới đây. Chỉ ra kết quả hiển thị của đoạn chương trình viết dưới đây:class A{ float x;public: A(){ x=1.5; } void funcA() { cout<<x; }};class B: private A{ float y;public: B(): A(){ y=2.5; } void funcA() { A::funcA(); cout<<y; }};void main(){ B *dt2=new B; dt2->funcA();}

A. x không xác định và y = 2.5 B. x = 1.5 và y = 2.5C. x= 1.5 và y không xác định. D. Giá trị của x và y là không xác

định. Câu 19. Giả sử cho các lớp như trong khai báo dưới đây. Chỉ ra kết quả hiển thị của đoạn chương trình?class A{ protected: float x;public: A(){ x=1.5; }

Page 62: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

void funcA() { cout<<"x="<<x; }};class B: private A{ float y;public: B():A(){ y=8.5; } float funcA() { return x+y; }};void main(){ B b; cout<<b.funcA();}

A. 8.5 B. 1.5 C. 10 D. Chương trình lỗi, không chạy được. Câu 20. Cho biết kết quả đoạn chương trình sauclass a{public: void fun(){ cout<<"class a";} };class b: public a{public: void fun(){ cout<<"class b";}};int main(){ a *obj = new b();

Page 63: On Tap Trac Nghiem Lthdt Khoa7

Trang 17/36

obj->fun(); getch();}

A. class a class b B. class b C. Chương trình báo lỗi D. class a