Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 36 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
36
Dung lượng
1,4 MB
Nội dung
Class & Struct II Lập trình nâng cao Nội dung Chủ yếu vấn đề cú pháp • Quyền truy nhập private/public cho biến/hàm thành viên • class so với struct • Khởi tạo thành viên • Hàm bạn (friend) • Cài chồng tốn tử • Tách cài đặt hàm thành viên khỏi định nghĩa • Tách file h cpp public / private? struct Vector { private: double x; double y; x y thành viên khai báo private add() print() thành viên public public: Vector add(Vector other) { } void print() { } }; // hàm thành viên struct/class Vector v; v.x = 1.0; //Lỗi! x private v.print(); //Ok print() public … public / private? struct Vector { private: double x; double y; Thành viên private struct/class thành viên truy nhập bên định nghĩa cài đặt struct/class public: Vector add(Vector other) { } void print() { } }; Thành viên public struct/class thành viên mà truy nhập từ đâu phạm vi biến struct/class // hàm thành viên struct/class Vector v; v.x = 1.0; //Lỗi! x private v.print(); //Ok print() public … Thành viên struct mặc định public struct Vector { double x; double y; Vector add(Vector other) { } void print() { } x,y, add(), print() }; public mà khơng cần ngồi khai báo thơng thường // bên struct/class Vector v; v.x = 1.0; //truy nhập biến thành viên x v v.print(); //truy nhập hàm thành viên print() v … Class giống hệt struct ngoại trừ quyền truy nhập mặc định struct Vector { private: double x; double y; class Vector { private: double x; double y; public: Vector add(Vector other) { } void print() { } }; public: Vector add(Vector other) { } void print() { } }; hoàn toàn tương đương Class giống hệt struct ngoại trừ quyền truy nhập mặc định struct Vector { private: double x; double y; class Vector { // không cần khai báo private: double x; double y; Vector add(Vector other) { } void print() { } }; Vector add(Vector other) { } void print() { } }; hoàn toàn tương đương mặc định, thành viên class private Cách khai báo thông dụng cho class class Vector { double x; double y; public: Vector add(Vector other) { } void print() { } }; class Vector { public: Vector add(Vector other) { } void print() { } private: double x; double y; }; Tại cần struct lẫn class? • Có struct kế thừa struct C • Class thuật ngữ quen thuộc lập trình hướng đối tượng (C++ ngơn ngữ hướng đối tượng) • Tuy nhiên: cú pháp struct C struct C++ khác Không dùng struct C code C++ ngược lại! Class / struct • Khi nên dùng class, nên dùng struct? • Thơng lệ: – dùng struct cho cấu trúc không cần che private – dùng class cho cấu trúc lại Tuy nhiên, tùy chọn người • Class struct dùng để định nghĩa lớp đối tượng Mỗi biến thuộc lớp đối tượng • Từ ta gọi: Vector v; // v đối tượng (thuộc lớp) Vector Vector* p = new Vector(); // p trỏ tới đối tượng Vector Ví dụ: định nghĩa phép cộng Vector class Vector { double x; double y; Tên hàm phải operator+, operator-, operator*, … public: Vector operator+(const Vector& other) const { Vector sum(x + other.x, y + other.y); return sum; } Kết quả: với Vector v1, v2, v3, ta viết: Vector (double _x = 0, double _y = 0) Vector s = v1 + v2 + v3; : x(_x), y(_y) {} }; Câu hỏi class Vector { double x; double y; Return trỏ nhanh return đối tượng Vector Có nên giảm thời gian chép giá trị trả cách không? public: Vector* operator+(const Vector& other) const { return new Vector(x + other.x, y + other.y); } Liệu(double với Vector_x v1, v2, v3, double ta viết Vector = 0, _y =biểu 0)thức sau? : x(_x), y(_y) {} (v1 + v2 + v3) }; Con trỏ this đối tượng class Vector { double x; double y; • Bên hàm thành viên, từ khóa this cho ta trỏ tới đối tượng chạy hàm thành viên public: bool equals(const Vector& other) { if (this == &other) return true; return (x == other.x && y == other.y); } void print() const { cout