Đề thi tham khảo môn lập trình hường đối tượng và C++

Tài liệu Đề thi tham khảo môn lập trình hường đối tượng và C++: Đề thi môn Lập trình hướng đối tượng và C++ Đề số Khoa CNTT – Bộ môn KHMT Chủ nhiệm bộ môn Câu 1: Cho lớp Vector được khai báo như sau: class Vector{ public: int getSize()const; // trả về độ dài của vector int &kthElement(int k); // trả về phần tử dữ liệu thứ k của thành viên data private: int data[100]; int size; }; Hãy cài đặt hai hàm getSize() và kthElement() và các hàm cấu tử sau của lớp Vector trên: cấu tử mặc định, cấu tử có 1 tham số mặc định là kích thước của biến thành viên size, hàm cấu tử có hai tham số tương ứng với hai biến thành viên của lớp. Cài đặt một hàm toán tử * và một hàm bạn multiply cho phép lấy tích vô hướng của hai đối tượng thuộc lớp Vector trên. Câu 2: Cho lớp Computer được khai báo như sau: class Computer{ public: char * getCode() const; // trả về giá trị biến thành viên code float getPrice() const; // trả về giá trị biến thà...

doc8 trang | Chia sẻ: Khủng Long | Lượt xem: 851 | Lượt tải: 0download
Bạn đang xem nội dung tài liệu Đề thi tham khảo môn lập trình hường đối tượng và C++, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Đề thi môn Lập trình hướng đối tượng và C++ Đề số Khoa CNTT – Bộ môn KHMT Chủ nhiệm bộ môn Câu 1: Cho lớp Vector được khai báo như sau: class Vector{ public: int getSize()const; // trả về độ dài của vector int &kthElement(int k); // trả về phần tử dữ liệu thứ k của thành viên data private: int data[100]; int size; }; Hãy cài đặt hai hàm getSize() và kthElement() và các hàm cấu tử sau của lớp Vector trên: cấu tử mặc định, cấu tử có 1 tham số mặc định là kích thước của biến thành viên size, hàm cấu tử có hai tham số tương ứng với hai biến thành viên của lớp. Cài đặt một hàm toán tử * và một hàm bạn multiply cho phép lấy tích vô hướng của hai đối tượng thuộc lớp Vector trên. Câu 2: Cho lớp Computer được khai báo như sau: class Computer{ public: char * getCode() const; // trả về giá trị biến thành viên code float getPrice() const; // trả về giá trị biến thành viên price void setPrice(float); // thiết lập giá trị cho biến price; void setCode(char *); // thiết lập giá trị cho biến code; friend void sort(Computer [], int size); private: char code[4]; float price; }; Hãy cài đặt hàm sort sắp xếp một mảng các đối tượng Computer theo thứ tự tăng dần của biến thành viên code, nếu cùng giá trị code thì so sánh theo biến price. Giả sử có hàm sau: template void sort(T [], int size); Hãy cài đặt các hàm toán tử so sánh >, ==, = cho lớp Computer để có thể sử dụng hàm sort với một mảng các đối tượng của lớp đó và cài đặt hàm sau: template int 2ndElement(T [], int size); trả về chỉ số của phần tử lớn thứ hai (theo tiêu chí so sánh như hàm sort trong phần a) trong một mảng. Sử dụng hàm 2ndElement hãy viết một đoạn chương trình đưa ra màn hình các giá trị code và price của đối tượng Computer lớn thứ hai của một mảng các đối tượng thuộc lớp Computer Clist. Thời gian làm bài là 60 phút – Thí sinh không được phép mở bất kỳ tài liệu nào Đề thi môn Lập trình hướng đối tượng và C++ Đề số Khoa CNTT – Bộ môn KHMT Chủ nhiệm bộ môn Câu 1: Cho đoạn chương trình sau: class Work{ public: char * getName(); char * getDes(); private: char * name; // tên công việc char * description; // mô tả về công việc }; template T max(T list[], int size){ T temp = list[size-1]; for(int i=0;i<size-1;i++) if(temp<list[i]) temp = list[i]; return new T(temp); } int main(){ Work works[2]; works[0] = new Work(“1”,”hard”); works[1] = new Work(“2”); sort(works, 2); return 0; } Hãy đưa ra và cài đặt các hàm cấu tử mà lớp Work cần có để đoạn chương trình trên có thể chạy đúng. Chỉ rõ dòng lệnh nào tương ứng với hàm toán tử nào được dùng. Ngoài các hàm toán tử lớp Work trên còn cần thêm các hàm nào nữa hãy cài đặt các hàm đó. Câu 2: Trình bày khái niệm chồng hàm (overload), khi nào nên dùng chồng hàm, khi nào không nên, nêu ví dụ cụ thể? Các trường hợp sau có là chồng hàm hay không? void swap(int &, int &); void swap(float *, float *); template void swap(T &, T &); Một hàng truy cập Internet cần viết một chương trình tính tiền truy cập cho khách. Đối với mỗi khách hàng chương trình chỉ cần quản lý các thông tin: tên khách hàng, giờ bắt đầu vào mạng, giờ kết thúc, số máy sử dụng để vào mạng. Hãy đưa ra các lớp (nêu rõ các phương thức và dữ liệu) và mối quan hệ giữa các lớp mà bạn cho là cần thiết để xây dựng chương trình trên? Thời gian làm bài là 60 phút – Thí sinh không được phép mở bất kỳ tài liệu nào Đề thi môn Lập trình hướng đối tượng và C++ Đề số Khoa CNTT – Bộ môn KHMT Chủ nhiệm bộ môn Câu 1: Cho lớp số phức ComplexN được khai báo như sau class ComplexN{ public: float * getReal(); float * getImg(); private: float r; // phần thực float i ; // phần ảo. }; Hãy cài đặt 3 hàm cấu tử khác nhau cho lớp ComplexN trong đó có hàm cấu tử mặc định. Giả sử người ta thêm vào hai hàm toán tử bạn phục vụ cho các thao tác nhập xuất dữ liệu cho các đối tượng của lớp số phức trên, hãy cài đặt hai hàm này và sử dụng chúng để viết một đoạn chương trình cho phép nhập dữ liệu cho một dãy 10 số phức và in chúng ra màn hình. Câu 2: Có đoạn chương trình sau: enum Days{Monday, Tuesday, Wenesday,Thursday, Friday, Saturday, Sunday}; Days & operator ++(Days & d, int){ if(d==Sunday) return d=Monday; int temp = d; return d = static_cast(++temp); } int main(){ Days day = Monday; for(;;) { cout << day << endl; day ++; if(day==Sunday) break; } return 0; } Hãy cho biết kết quả của đoạn chương trình trên. Nếu muốn chương trình in ra màn hình là: Thuhai, Thuba, Thutu, Thunam, Thusau, Thubay, Chunhat thì cần có thêm hàm như thế nào, hãy đưa ra cài đặt cụ thể của hàm đó. Tại sao các hàm cấu tử lại được gán nhãn là pubic, có thể có hàm cấu tử gán nhãn private được không? Có thể khởi tạo các thành phần static trong cấu tử được không? Thời gian làm bài là 60 phút – Thí sinh không được phép mở bất kỳ tài liệu nào Đề thi môn Lập trình hướng đối tượng và C++ Đề số Khoa CNTT – Bộ môn KHMT Chủ nhiệm bộ môn Câu 1: Cho lớp IntList cài đặt danh sách móc nối các số nguyên được khai báo như sau: class IntList{ public: IntList(); // khởi tạo danh sách rỗng kích thước bằng 100 IntList(int Size); // khởi tạo danh sách rỗng kích thước bằng Size int getFirst(); // trả về giá trị phần tử ở đầu danh sách int getLast(); // trả về giá trị phần tử ở cuối danh sách void delFirst(); // xóa phần tử ở đầu danh sách Void delLast(); // xóa phần tử ở cuối danh sách int getSize(); // trả về số phần tử của danh sách private: int * data int size; }; Dựa vào lớp IntList hãy kế thừa và xây dựng lớp IntStack gồm các phương thức sau: IntStack(); // khởi tạo stack rỗng kích thước bằng 100 IntStack(int Size); // khởi tạo stack rỗng kích thước bằng Size Bool isEmpty(); // kiểm tra stack rỗng int Pop(); // loại bỏ phần tử ở đỉnh stack void Push(int); // thêm 1 phần tử vào đỉnh stack Thế nào là ràng buộc động, cho ví dụ? Cách thức trình biên dịch giải quyết ràng buộc động? Câu 2: Cho lớp Song và một đoạn chương trình như sau: class Song{ public: friend void sort(Song [], int size); private: char * title; char * content; }; int main(){ Song songs[2]; songs[0] = new Song(“Yesterday”,””); songs[1] = new Song(); sort(songs,2); return 0; } Lớp Song có cần hủy tử và các hàm toán tử gán, cấu tử copy không, tại sao? Hãy cài đặt các hàm này? Giả sử trong chương trình người ta muốn đếm số các đối tượng thuộc lớp Song bằng cách sử dụng một biến thành viên tĩnh, hãy viết các hàm cần thiết và đoạn chương trình đưa ra màn hình các đối tượng thuộc lớp Song. Thời gian làm bài là 60 phút – Thí sinh không được phép mở bất kỳ tài liệu nào Đề thi môn Lập trình hướng đối tượng và C++ Đề số Khoa CNTT – Bộ môn KHMT Chủ nhiệm bộ môn Câu 1: Cho lớp Set cài đặt một tập hợp các ký tự được khai báo như sau: const int MAX_SIZE = 255; class CharSet{ public: CharSet(); Bool isIn(char) const; // kiểm tra xem một ký tự có trong tập hợp không Bool isFull()const; // kiểm tra tập hợp đã đầy chưa Bool isEmpty() const; // kiểm tra tập hợp rỗng int getSize() const; // trả về số phần tử của tập hợp void add(char); // thêm vào tập hợp một ký tự mới void del(char); // loại bỏ một ký tự khỏi tập hợp void print()const; // in các ký tự trong tập hợp ra màn hình private: char data[MAX_SIZE]; int top; }; Hãy cài đặt các các hàm của lớp Set trừ hai hàm getSize() và print(). Cài đặt hàm toán tử + thực hiện phép toán hợp hai tập hợp, kết quả trả về là một tập hợp mới. Câu 2: Cho một hàm bản mẫu hoán đổi giá trị của hai đối tượng bất kỳ và đoạn chương trình sau: template void swap(T& x, T& y){ T tmp = x;        x = y;        y = tmp; } int main(){        int i, j; swap(i, j);        float a, b ; swap(a, b);        char c, d; swap(c, d);        Person p1, p2; swap(p1, p2);        return 0; } Trong đó Person là một lớp có hai thành viên dữ liệu là name (một xâu ký tự có độ dài không quá 37) và age (một số nguyên dương). Hãy cho biết để có thể dùng hàm swap với một lớp nào đó thì lớp đó phải thỏa mãn điều kiện gì, hãy đưa ra cài đặt cụ thể với lớp Person. Trong đoạn chương trình chính trên có các thể nghiệm hàm bản mẫu nào được trình biên dịch sinh ra? Thế nào là lớp trừu tượng, cho ví dụ? Khi nào người ta nên dùng lớp trừu tượng? Với một lớp trừu tượng thực sự có thể dùng hàm hủy tử ảo thực sự được không, tại sao? Thời gian làm bài là 60 phút – Thí sinh không được phép mở bất kỳ tài liệu nào Đề thi môn Lập trình hướng đối tượng và C++ Đề số Khoa CNTT – Bộ môn KHMT Chủ nhiệm bộ môn Câu 1: Cho lớp Animal mô tả các đối tượng động vật nói chung và lớp Cat mô tả các đối tượng mèo kế thừa từ lớp Animal và có thêm 1 thành viên dữ liệu là color để mô tả màu lông, lớp Animal được khai báo như sau: class Animal{ public: Animal(char * N = “”):age(0){ name = new char[strlen(N)+1]; strcpy(name, N); } Animal(char * N, int Age):age(Age){ name = new char[strlen(N)+1]; strcpy(name, N); } ~Animal(){delete name;} private: char * name; int age; }; Giả sử lớp Cat có hai cấu tử: một cấu tử mặc định và một cấu tử có đầy đủ 3 tham số cho các biến thành viên và một hủy tử. Hãy đưa ra cài đặt của lớp Cat. Nêu sự khác nhau giữa việc gọi một hàm ảo và một hàm bình thường? Có thể thực hiện chồng hàm hủy tử của một lớp được không, tại sao? Câu 2: Cho lớp bản mẫu Stack được khai báo như sau: template class Link{ T data; Link* next; void initialize(T dat, Link* nxt){}; public: friend class Stack; ~Link(){delete next;} }; template class Stack { Link* head; public: void initialize(); // khởi tạo một Stack rỗng void push(D dat); // thêm một phần tử vào đầu Stack D pop(); // loại bỏ phần tử trên đỉnh Stack ~Stack(); }; Hãy đưa ra cài đặt đầy đủ của lớp Stack và cho biết một lớp C bất kỳ cần thỏa mãn điều kiện gì để có thể sử dụng lớp thể nghiệm Stack. Thời gian làm bài là 60 phút – Thí sinh không được phép mở bất kỳ tài liệu nào Đề thi môn Lập trình hướng đối tượng và C++ Đề số Khoa CNTT – Bộ môn KHMT Chủ nhiệm bộ môn Câu 1: Cho hai lớp A, B các lớp C, D dựa trên hai lớp A, B như sau: class C{ public: C(); ~C(); private: A aObj; B bObj; }; class D{ public: D(); ~D(); private: A aObjList[10]; }; Giả sử các lớp A, B có đầy đủ các hàm cấu tử và hủy tử hãy cho biết thứ tự gọi tới các hàm cấu tử và hủy tử của hai đối tượng aObj, bObj đối với lớp C và các đối tượng của mảng aObjList đối với lớp D. Chỉ ra các chỗ sai trong đoạn chương trình sau và sửa lại (có thể bỏ đi nếu cần thiết) cho đúng: class Point { public: Point(float x, float y); // hàm cấu tử khởi tạo tọa độ Point(float r, float a); // hàm cấu tử khởi tạo tọa độ Point():x(0.0), y(0.0), numberOfPoints(0){}; // hàm cấu tử khởi tạo ~Point(); private: float x, y; static int numberOfPoints; // biến dùng để đếm số đối tượng thuộc lớp Point }; main(){ Points p[10]; cout << “So cac diem hien tai la:” << Points::numberOfPoints; } Đưa ra đoạn cài đặt cần thiết để đoạn chương trình trong hàm main có thể chạy đúng. Câu 2: Cho hàm bản mẫu Max trả về phần tử lớn nhất của một mảng khai báo như sau: template T & Max(T a[], int size); Hãy cài đặt hàm Max và các hàm cần thiết khác để đoạn chương trình sau đây có thể chạy đúng: main(){ int a[] = {1, 3 , -9}, char * str[] = {“Nam”, “Bac”, “Dong”, “Tay”}; cout << Max(a, 3) << “ “ << Max(str, 4); } Trong thuật toán sắp xếp nổi bọt giảm dần khi xét phần tử thứ i, ta sẽ đổi chỗ nó với phần tử lớn nhất trong số n – i phần tử đứng sau nó. Hãy viết hàm bản mẫu Sort sắp xếp một mảng bất kỳ bằng cách sử dụng gợi ý trên và hàm bản mẫu Max ở phần a. Thời gian làm bài là 60 phút – Thí sinh không được phép mở bất kỳ tài liệu nào Đề thi môn Lập trình hướng đối tượng và C++ Đề số Khoa CNTT – Bộ môn KHMT Chủ nhiệm bộ môn Câu 1: Cho lớp Stdlib được khai báo như sau: class Stdlib { public: static int strlen(const char* s) { return ::strlen(s); } static int strcmp(const char* a, const char* b) { return ::strcmp(a, b); } }; Khai báo trên có gì sai không, nếu có hãy chỉ rõ chỗ sai và sửa lại. Cho biết giá trị của sizeof(Stdlib). Để sử dụng các phương thức của lớp Stdlib có cần tạo ra đối tượng nào tương ứng hay không, cho ví dụ cụ thể? Cho hai lớp Base và Derived được khai báo như sau: class Base { private: int x; public: Base() : x(0) {} Base(int x) : x(x) {} protected: void print(ostream&); }; class Derived : public Base { private: int y; char* s; public: Derived() : Base(), y(0), s(0) {} Derived(int x,int y): Base(x), y(0), s(0){} void print(ostream& s); }; Hãy cho biết giá trị của sizeof(Base), sizeof(Derived) và giải thích? Câu 2: Cho lớp bản mẫu LinkList được khai báo như sau: template class Node{ T data; Node* next; void initialize(T dat, Node* nxt):data(dat), next(nxt){}; friend class LinkList; ~Node(){delete next;} }; template class LinkList{ Node* head; public: LinkList(); // khởi tạo một danh sách rỗng void add(D & dat); // thêm một phần tử vào danh sách void del(D & dat); // loại bỏ phần tử khỏi danh sách void sort(); // sắp xếp danh sách ~LinkList();}; Hãy đưa ra cài đặt đầy đủ của lớp LinkList và cho biết một lớp C bất kỳ cần thỏa mãn điều kiện gì để có thể sử dụng lớp thể nghiệm LinkList. Thời gian làm bài là 60 phút – Thí sinh không được phép mở bất kỳ tài liệu nào

Các file đính kèm theo tài liệu này:

  • doctailieu.doc
Tài liệu liên quan