Microsoft PowerPoint C++ - Inheritance.pptx

Tài liệu tương tự
Kế thừa và đa hình

Trường ĐHBK Hà Nội Khoa Điện Bộ môn Điều khiển Tự động Tài liệu hướng dẫn thực hành: KĨ THUẬT LẬP TRÌNH C/C++ Bài 1: Lập trình cơ sở 1 Mục đích bài th

Lập trình và ngôn ngữ lập trình

Kế thừa

Hàm và lớp template trong Lập trình hướng đối tượng Hàm và lớp template trong Lập trình hướng đối tượng Bởi: unknown Trong phần này, chúng ta tìm hiểu

Template and Exception Template and Exception Bởi: Thanh Hiền Vũ TEMPLATE Trong phần này, chúng ta tìm hiểu về một trong các đặc tính còn lại của C++,

Chương trình dịch

Những cơ sở của ngôn ngữ C# Những cơ sở của ngôn ngữ C# Bởi: phamvanviet truonglapvy Trong chương này sẽ trình bày về hệ thống kiểu trong C#; phân biệ

Bài 7. Con trỏ Mục tiêu: 1. Luyện tập sử dụng con trỏ và địa chỉ của các biến 2. Sử dụng con trỏ khi thao tác với mảng. Giới hạn: không dùng các thư v

Lớp và đối tượng-các hàm và các lớp friend Lớp và đối tượng-các hàm và các lớp friend Bởi: Thanh Hiền Vũ CÁC HÀM VÀ CÁC LỚP friend Một hàm friend của

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG TIN HỌC ĐẠI CƯƠNG Bài 5. Kiểu dữ liệu và biểu thức trong C Nội dung 1. Các ki

NGÔN NGƯ LÂ P TRIǸH Biên tập bởi: nguyenvanlinh

Thực hành trên Rose Thực hành trên Rose Bởi: Đoàn Văn Ban Xây dựng biểu đồ thành phần + Tạo lập mới hoặc mở một biểu đồ thành phần đã được tạo lập trư

Câu lệnh (statement) Câu lệnh (statement) Bởi: Khuyet Danh Trong C# một chỉ dẫn lập trình đầy đủ được gọi là câu lệnh. Chương trình bao gồm nhiều câu

(Tái bản lần thứ hai)

Array, Indexer và Collection Array, Indexer và Collection Bởi: phamvanviet truonglapvy Mảng (Array) Mảng là một tập hợp các phần tử có cùng kiểu, được

Lập trình cấu trúc trong Visual Basic Lập trình cấu trúc trong Visual Basic Bởi: Nguyễn Sơn Học xong chương này, sinh viên phải nắm bắt được các vấn đ

Copyright vietjack.com Nạp chồng toán tử trong C# Operator Overloading là Nạp chồng toán tử. Bạn có thể tái định

Tạp chí KHOA HỌC ĐHSP TPHCM Số 54 năm 2014 PHƯƠNG PHÁP SỬ DỤNG TRÒ CHƠI TRONG DẠY HỌC NGUYỄN THỊ BÍCH HỒNG * TÓM TẮT Bài viết trình bày phương pháp sử

Microsoft PowerPoint - 03_Robo_Kick

TRƯỜNG ĐẠI HỌC NAM CẦN THƠ KHOA LUẬT ĐỀ CƯƠNG CHI TIẾT HỌC PHẦN XÃ HỘI HỌC PHÁP LUẬT (LƯU HÀNH NỘI BỘ) CẦN THƠ 2018

Tìm hiểu ngôn ngữ lập trình Visual Basic Tìm hiểu ngôn ngữ lập trình Visual Basic Bởi: Khuyet Danh Tìm hiểu ngôn ngữ lập trình Visual Basic Tổng quan

Animation, Modules 6 - Hoạt hình, tách file

Microsoft Word - jsp_exception_handling.docx

PowerPoint Template

1

Cây và cây nhị phân Cây và cây nhị phân Bởi: Trần Hạnh Nhi CẤU TRÚC CÂY Định nghĩa 1: cây là một tập hợp T các phần tử (gọi là nút của cây) trong đó c

Chương trình dịch

Xử lý ngoại lệ

NGÔN NGỮ THỐNG KÊ R

BỘ GIÁO DỤC VÀ ĐÀO TẠO TÀI LIỆU HƯỚNG DẪN SỬ DỤNG CHỨC NĂNG ĐIỀU CHỈNH NGUYỆN VỌNG ĐĂNG KÝ XÉT TUYỂN (Dành cho Thí sinh và Điểm tiếp nhận hồ sơ điều c

Microsoft Word - su_dung_sqlite_voi_php.docx

Chiến lược kiểm thử Chiến lược kiểm thử Bởi: Khoa CNTT ĐHSP KT Hưng Yên Các công đoạn kiểm thử Quá trình kiểm thử có thể chia làm các giai đoạn : Kiểm

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG TIN HỌC ĐẠI CƯƠNG Bài 9. Vào ra dữ liệu trong C Các lệnh vào ra dữ liệu C cun

Java cơ bản

Khái quát chung về hệ thống kế toán pháp Khái quát chung về hệ thống kế toán pháp Bởi: Đại Học Kinh Tế Quốc Dân Một số vấn đề về bản chất, đối tượng v

Chủ đề :

PHỤ LỤC 01 HƯỚNG DẪN KHÁCH HÀNG THAO TÁC ĐĂNG KÝ, KÍCH HOẠT VÀ SỬ DỤNG SOFT OTP (CHALLENGE VÀ MOBILE PUSH) CHO DỊCH VỤ ONLINE BANKING CỦA KHÁCH HÀNG C

TDDBR CẨM NANG THAO TÁC KIỂM SOÁT, ĐẢM BẢO CHẤT LƯỢNG (XÁC MINH BẰNG ẢNH VỆ TINH)

Microsoft Word - Bai 7.1.docx

Slide 1

Bài 1:

'Tôi vẫn theo đến cùng vụ Đỗ Đăng Dư' 3 tháng Chia sẻ Một luật sư vừa bị 'hành hung' trong khi đi làm việc về vụ vị thành niên Đỗ Đăng Dư chết

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG TIN HỌC ĐẠI CƯƠNG Bài 13. Hàm Nội dung 1. Khái niệm hàm 2. Khai báo và sử dụn

Microsoft Word - custom_component_trong_android.docx

Chương 1:

Slide 1

Copyright vietjack.com Chuỗi (String) trong C# Trong C#, bạn có thể sử dụng các chuỗi (string) như là mảng các ký

Phân tích bài Tiếng nói của văn nghệ

Chuỗi Chuỗi Bởi: phamvanviet truonglapvy Chuỗi (string) trong C# là một kiểu dựng sẵn như các kiểu int, long, có đầy đủ tính chất mềm dẻo, mạnh mẽ và

I. MSWLogo là gì. Giới thiệu. Là một ngôn ngữ lập trình được thiết kế và phát triển bởi Seymour Papert, Daniel Bobrow và Wallace Feurzeig. Trong chươn

Microsoft Word - phuong-phap-thuyet-minh.docx

Microsoft Word - cau-truc-du-lieu-hang-doi.docx

Cách tạo User và Thiết kế Database Cách tạo User và Thiết kế Database Bởi: Khoa CNTT ĐHSP KT Hưng Yên Cách tạo một User Database Chúng ta có thể tạo m

Kiểu dữ liệu văn bản Kiểu dữ liệu văn bản Bởi: PGS. TS. NGƯT Phạm Văn Huấn Ngoài những dữ liệu số như các số nguyên, số thực, máy tính còn có thể lưu

Đề cương ôn tập và hướng dẫn thi học phần “Lí luận dạy học đại học”

Microsoft PowerPoint - OOP4-OperatorOverloading_new.ppt

Microsoft Word - 14-bi-quyet-tranh-luan.docx

ĐỀ THI GIỮA KỲ MÔN: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Đề số 1. Thời gian 120 phút (Sinh viên KHÔNG được sử dụng tài liệu hay máy tính ) Xây dựng lớp STRING và

BÀI TẬP THỰC HÀNH

TRƯỜnG ĐẠI HỌC BÁCH KHOA HÀ nội VIỆn CÔnG nghệ THÔnG TIn VÀ TRUYỀn THÔnG TIN HỌC ĐẠI CƯƠNG Bài 10. Các cấu trúc lập trình trong C Nội dung 1. Cấu trúc

Điều khoản sử dụng The Chemours Company, các chi nhánh và công ty con (gọi chung là Chemours ) cung cấp trang web ( Trang web ) này cho bạn theo các đ

Danh sách tuyến tính kiểu hàng đợi Danh sách tuyến tính kiểu hàng đợi Bởi: Khoa CNTT ĐHSP KT Hưng Yên ĐỊNH NGHĨA Hàng đợi là một vật chứa (container)

Microsoft Word - kieu_du_lieu_trong_jdbc.docx

1 Tạo slide trình diễn với Microsoft Powerpoint Tạo slide trình diễn với Microsoft Powerpoint Người thực hiện Hoàng Anh Tú Phạm Minh Tú Nội dung 1 Mục

IPSec IPSec Bởi: Phạm Nguyễn Bảo Nguyên Chúng ta đã biết khi ta sao chép dữ liệu giữa 2 máy hoặc thông qua mạng VPN để nâng cao chế độ bảo mật người q

Bài thực hành 6 trang 106 SGK Tin học 10

Hướng dẫn sử dụng Camera thông minh EZVIZ C6C Bước 1 : Kết nối Camera với phần mêm EZVIZ (ta có thể tham khảo phần thêm Camera vào trong phần EZVIZ) B

Microsoft Word - status_code_trong_servlet.docx

Phân tích bài thơ Thương vợ của Trần Tế Xương – Văn mẫu lớp 11

Loi vong lap lap vo tan - Worksheet_Change

Lớp đối tượng trong.net Framework Lớp đối tượng trong.net Framework Bởi: Khuyet Danh Trong chương này chúng ta sẽ tìm hiểu các lớp cơ sở mà.net cung c

2018 Nhận xét, phân tích, góp ý cho Chương trình môn Tin học trong Chương trình Giáo dục Phổ thông mới

Slide 1

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC KHOA HỌC XÃ HỘI VÀ NHÂN VĂN NGUYỄN THỊ THANH LOAN BƢỚC ĐẦU THIẾT KẾ NGỮ

Microsoft Word - server_response_trong_servlet.docx

SÁCH HƯỚNG DẪN SỬ DỤNG SM-G970F/DS SM-G973F/DS SM-G975F/DS Vietnamese. 03/2019. Rev.1.1

Báo Giấy Tháng 4 năm 2014 Năm thứ 1 Số ra mắt P.O. Box 1745, Garden Grove, CA Thư Tòa Soạn T

Hướng dẫn sử dụng dịch vụ FTP

Chương trình dịch

Các Vấn Đề Cơ Sở Của Khoa Học Máy Tính Th.S GVC Tô Oai Hùng BAØI TAÄP CHÖÔNG 1 1. Viết giải thuật để mô tả thói quen mỗi buổi sáng của bạn, từ lúc ngh

Slide 1

Microsoft Word - Muc dich mon hoc.doc

26 Khoa hoïc Coâng ngheä LẬP TRÌNH PHÂN TÁN DÙNG CÔNG NGHỆ MOBILE AGENT VỚI SỰ HỖ TRỢ CỦA JAVA VÀ VOYAGER Tóm tắt ThS. Nguyễn Khắc Quốc * Lập trình ph

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG BÀI GIẢNG MÔN QUẢN TRỊ BÁN HÀNG Giảng viên: Th.S. Trần Thị Thập Điện thoại/ Bộ môn:

sdfsdfsdfsfsdfd

Microsoft Word - 11Truong Thanh Cuong.doc

Microsoft Word - tao_ung_dung_hello_world_trong_android.docx

Co s? d? li?u (Database)

Microsoft Word - viet-bai-lam-van-so-6.docx

PowerPoint Template

Microsoft Word - custom_font_trong_android.docx

OpenStax-CNX module: m Giới thiệu về ngôn ngữ C và môi trường turbo C 3.0 ThS. Nguyễn Văn Linh This work is produced by OpenStax-CNX and licens

Kiểm soát truy suất Kiểm soát truy suất Bởi: Khoa CNTT ĐHSP KT Hưng Yên Khái niệm Bảo mật thực chất là kiểm soát truy xuất [1]. Mục đích của bảo mật m

BỘ GIÁO DỤC VÀ ĐÀO TẠO ĐẠI HỌC ĐÀ NẴNG NGUYỄN THỊ MINH HƯỜNG CÁI TÔI TRỮ TÌNH TRONG THƠ BẰNG VIỆT Chuyên ngành: Văn học Việt Nam Mã số: TÓ

Xử lý thông tin bản đồ trong GIS Xử lý thông tin bản đồ trong GIS Bởi: Vo Quang Minh CẤU TRÚC THÔNG TIN BẢN ĐỒ Giới thiệu Các đối tượng số trong cơ sở

Bang gia Binder

Phân tích vẻ đẹp của Thúy Kiều trong đoạn trích Chị em Thúy Kiều

Microsoft Word - TNC VIETNAM - Huong dan tong quat PM.doc

Phân tích Vẻ đẹp của nhân vật Huấn Cao trong Chữ người tử tù của Nguyễn Tuân – Văn hay lớp 11

Bản ghi:

Kế thừa (inheritance) 1

Khái niệm Để quản lý nhân sự của công ty, ta có thể định nghĩa các lớp tương ứng với các vị trí làm việc của công ty: class Worker { private: string name; float salary; int level; string getname() {} void pay() {} void dowork() {} class Manager { private: string name; float salary; int dept; string getname() {} void pay() {} void dowork() {} class Director { private: string name; float salary; string getname() {} void pay() {} void dowork() {} Cả 3 lớp trên đều có những biến và hàm giống hệt nhau về nội dung tạo ra một lớp Employee chứa các thông tin chung đó để sử dụng lại Sử dụng lại code Giảm số code cần viết Dễ bảo trì, sửa đổi về sau Rõ ràng hơn về mặt logic trong thiết kế chương trình 2

Khái niệm (tiếp) Lớp mẹ (hay lớp cơ sở) Employee Các lớp con (hay lớp dẫn xuất) Worker Manager Director Hai hướng thừa kế: Cụ thể hoá: lớp con là một trường hợp riêng của lớp mẹ (như ví dụ trên) Tổng quát hoá: mở rộng lớp mẹ (vd: Point2D thêm biến z để thành Point3D) Kế thừa cho phép các lớp con sử dụng các biến và phương thức của lớp mẹ như của nó, trừ các biến và phương thức private 3

Kế thừa public class Employee { private: string name; float salary; string getname() {} void pay() {} class Worker : public Employee { private: int level; void dowork() {} void show() { cout << getname() << salary; // lỗi } Worker w; w.getname(); w.dowork(); w.pay(); w.salary = 10; // lỗi w.show(); Employee e = w; // OK Worker w2 = e; // lỗi Worker w3 = (Worker)e; // lỗi Các thành phần public của lớp mẹ vẫn là public trong lớp con Lớp con chuyển kiểu được thành lớp mẹ, nhưng ngược lại không được 4

Kế thừa private class LinkedList { private: void inserttail(int x) { } void inserthead(int x) { } void deletehead() { } void deletetail() { } int gethead() { } int gettail() { } class Stack : private LinkedList { void push(int x) { inserthead(x); } int pop() { int x = gettail(); deletetail(); return x; } Stack s; s.push(10); s.push(20); s.pop(); s.inserttail(30); // lỗi s.gettail(); // lỗi Tất cả các thành phần của lớp mẹ đều trở thành private của lớp con 5

Thành phần protected Ngoài public và private, còn có các thành phần protected: có thể được sử dụng bởi các phương thức trong lớp dẫn xuất từ nó, nhưng không sử dụng được từ ngoài các lớp đó class Employee { protected: string name; float rate; int hours; int getsalary() { return rate*hours; } void setname(const char* s) { name = s; } string getname() { return name; } void pay() { } class Worker: public Employee { void dowork() { } void print() { cout << "Ten: " << name << "Luong: " << getsalary(); } Worker w; w.dowork(); w.pay(); w.print(); w.name = "NV Tung"; // lỗi cout << w.getsalary(); // lỗi 6

Tổng kết các kiểu kế thừa Kiểu kế thừa private protected public Phạm vi private (không) (không) (không) protected private protected protected public private protected public Cột: các kiểu kế thừa Hàng: phạm vi các biến/phương thức thành phần trong lớp mẹ Kết quả: phạm vi các biến/phương thức trong lớp dẫn xuất 7

Constructor và destructor trong kế thừa Constructor và destructor không được các lớp con thừa kế Mỗi constructor của lớp dẫn xuất phải gọi một constructor của lớp mẹ, nếu không sẽ được ngầm hiểu là gọi constructor mặc định class Pet { Pet() {} Pet(string name) {} class Dog: public Pet { Dog() {} // Pet() Dog(string name): Pet(name) {} class Bird { Bird(bool canfly) {} class Eagle: public Bird { // sai: Eagle() {} Eagle(): Bird(true) {} Destructor của các lớp sẽ được gọi tự động theo thứ tự ngược từ lớp dẫn xuất tới lớp cơ sở ~Dog() ~Pet() ~Eagle() ~Bird() 8

Gọi cons của lớp mẹ trong cons của lớp con Không thể gọi cons của lớp mẹ trong cons của lớp con như hàm, mà phải gọi ở danh sách khởi tạo class Point3D: private Point2D { protected: float z; Point3D(): Point2D(0., 0.), z(0.) // đúng { } Point3D(double x, double y, double z) { // gọi cons mặc định Point2D() Point2D(x, y); // sai: tạo đối tượng Point2D tạm this->z = z; 9

Phương thức ảo (virtual method) bắt buộc Là phương thức được khai báo ở lớp mẹ, nhưng có thể được định nghĩa lại (thay thế) ở các lớp dẫn xuất class Shape { Kết quả chạy: virtual void draw() Circle::erase { cout<<"shape::draw\n"; Circle::draw } void erase() Shape::erase { cout<<"shape::erase\n"; Shape::draw } void redraw() { erase(); draw(); } có thể bỏ Shape::erase Circle::draw Shape::erase Circle::draw class Circle: public Shape { Shape::erase Circle::draw virtual void draw() Shape::erase { cout<<"circle::draw\n"; } Shape::draw void erase() Shape::erase { cout<<"circle::erase\n"; Circle::draw } } Shape::erase Circle::draw void main() { Circle c; Shape s1 = c; Shape& s2 = c; Shape* s3 = &c; c.erase(); c.draw(); s1.erase(); s1.draw(); s2.erase(); s2.draw(); s3->erase(); s3->draw(); c.redraw(); s1.redraw(); s2.redraw(); s3->redraw(); 10

Lớp trừu tượng (abstract class) Phương thức ảo thuần tuý (pure virtual method): là phương thức được khai báo nhưng chưa được định nghĩa cần được định nghĩa trong các lớp dẫn xuất Lớp trừu tượng là lớp có phương thức ảo thuần tuý Không thể tạo được đối tượng từ lớp trừu tượng class Shape { virtual void draw() = 0; virtual void erase() = 0; virtual double area() = 0; void redraw() { } class Circle: public Shape { virtual void draw() { } virtual void erase() { } virtual double area() { } Shape p; // lỗi Circle c; Shape p2 = c; // lỗi Shape& p3 = c; // OK Shape* p4 = &c; // OK void func(shape s) {} // lỗi void func(shape& s) {} // OK void func(shape* s) {} // OK 11

Tính đa hình (polymorphism) Thừa kế và định nghĩa các hàm ảo giúp quản lý đối tượng dễ dàng hơn: có thể gọi đúng phương thức mà không cần quan tâm tới lớp thực sự của nó là gì (trong C phải dùng switch hoặc con trỏ hàm) class Pet { virtual void say() = 0; class Cat: public Pet { virtual void say() { cout << "miao\n"; } Pet* p[3] = { new Dog(), new Cat(), new Cat() for (int i=0; i<3; i++) p[i]->say(); // // Thế này không được: // Pet p2[2] = { Dog(), Cat() // class Dog: public Pet { virtual void say() { cout << "gruh\n"; } Kết quả chạy: gruh miao miao 12

Destructor ảo class ClassA { ClassA() { } ~ClassA() { } class ClassB: public ClassA { ClassB() { } ~ClassB() { } ClassB* b = new ClassB; ClassA* a = (ClassA*)new ClassB; delete b; // ~ClassB, ~ClassA delete a; // ~ClassA class ClassA { ClassA() { } virtual ~ClassA() { } class ClassB: public ClassA { ClassB() { } virtual ~ClassB() { } ClassB* b = new ClassB; ClassA* a = (ClassA*)new ClassB; delete b; // ~ClassB, ~ClassA delete a; // ~ClassB, ~ClassA Nên luôn khai báo destructor ảo nếu không có gì đặc biệt 13

Biểu diễn trong bộ nhớ #pragma pack(1) class V2 { double x, y; static int i; void f2(); virtual void fv2(); class V3: public V2 { double z; void f3(); virtual void fv2(); virtual void fv3(); V3 v3; V2& v2 = v3; printf("%d %d\n", &v2, sizeof(v2)); printf("%d %d\n", &v3, sizeof(v3)); printf("%d %d %d\n", &v3.x, &v3.y, &v3.z); Kết quả chạy: 1245000 20 1245000 28 1245004 1245012 1245020 Thành phần Kích thước vtable 4 x 8 y 8 z 8 Dữ liệu static không nằm trong đối tượng Nếu lớp có phương thức ảo, thêm một con trỏ (vtable) tới một bảng các phương thức ảo phương thức ảo tương tự như con trỏ hàm Dữ liệu của lớp con sẽ được nối tiếp vào sau dữ liệu của lớp mẹ Chú ý việc chỉnh biên dữ liệu (data alignment) 14 V2 V3 vtable fv2() fv3()

Đa kế thừa (kế thừa nhiều lớp) C++ cho phép một lớp có thể kế thừa từ nhiều lớp khác nhau class Camera { void takepicture(); class FMDevice { void turnon(); void turnoff(); void setfreq(float f); class Phone { void call(string num); class CellPhone: public Camera, protected FMDevice, public Phone { void turnfmon(); void turnfmoff(); void setfmfreq(float f); CellPhone p; p.takepicture(); p.turnon(); // lỗi p.turnfmon(); p.call("0912345678"); 15

Thành phần trùng tên class Legged { void move() { } class Winged { void move() { } class Pigeon: public Legged, public Winged { Pigeon p1; p1.move(); // lỗi p1.legged::move(); // Legged p1.winged::move(); // Winged ((Legged)p1).move(); // Legged ((Winged)p1).move(); // Winged class Penguin: public Legged, public Winged { void move() { Legged::move(); } Penguin p2; p2.move(); // Penguin ((Legged)p2).move(); // Legged ((Winged)p2).move(); // Winged Đa kế thừa có thể khiến chương trình trở nên rất phức tạp và khó kiểm soát các biến/phương thức thành phần chỉ nên sử dụng khi thực sự cần thiết 16

Biểu diễn đa kế thừa trong bộ nhớ class B1 {} class B2 {} class D: public B1, public B2 {} class B1 double a, b; virtual void fb1(); class B2 int c; virtual void fb2(); D d; B1& b1 = d; B2& b2 = d; printf("%d %d\n", &d, sizeof(d)); printf("%d %d\n", &b1, sizeof(b1)); printf("%d %d\n", &b2, sizeof(b2)); class D float d; virtual void fb1(); virtual void fb2(); virtual void fd(); Kết quả chạy: 1244996 32 1244996 20 1245016 8 Các thành phần của các lớp cơ sở nằm nối tiếp nhau trong bộ nhớ Lớp kế thừa ảo: tự tìm hiểu thêm vtable Thành phần Kích thước vtable 4 a 8 b 8 vtable 4 c 4 d 4 17 fb1() fd() vtable fb2() B1 B2 D

Bài tập 1. Định nghĩa kiểu struct Shape trong C rồi viết các hàm draw(), area() tuỳ theo dạng hình: tròn, vuông, chữ nhật. Dùng hai cách làm: dùng switch, con trỏ hàm. So sánh với cách làm trong C++. 2. Với điều kiện nào thì có thể lưu một đối tượng ra file rồi đọc lại trong lần chạy sau như dưới đây? Giải thích và chạy thử. lần chạy trước: fwrite((void*)&obj, 1, sizeof(obj), file); lần chạy sau: fread((void*)&obj, 1, sizeof(obj), file); 3. Viết các lớp Shape (trừu tượng) và Circle, Square, Rectangle, Ellipse, Sphere. Hãy thiết kế việc kế thừa sao cho hợp lý. 4. Hoàn tất các lớp Employee, Worker, Manager, Director và viết một chương trình thử. (Employee lớp trừu tượng, dowork là phương thức ảo, viết chương trình chính: mảng các nhân viên, cho các nhân viên làm việc, trả lương cho các nhân viên) 5. Mở rộng và sửa bài tập trên: Thêm lớp Company chứa toàn bộ các nhân viên, viết hàm dowork() cho công ty. Thêm quan hệ về công việc giữa các nhân viên. VD: mỗi Worker có 1 Manager, 6. Viết các lớp B1, B2 và D trong phần đa kế thừa rồi kiểm tra kích thước các kiểu và địa chỉ các thành phần so với địa chỉ của đối tượng. 18 7. Tích phân, tích phân đường thẳng, parabol