.15| Con trỏ đối tượng và mảng đối tượng

Một phần của tài liệu Tài liệu giảng dạy kỹ thuật lập trình 2 (Trang 76 - 79)

Xét lớp Pont sau:

Câu lệnh: Point pt;

Khai báo một biến pt cũng chính là tạo ra một đối tượng lớp Point. Cũng như kiểu dữ liệu khác chúng ta có thể khai báo một con trỏ dùng để trỏ tới đối tượng: Point pt;

Point *p_pt;

Trước khi sử dụng con trỏ p_pt thì phải gửi tạo giá trị ban đầu cho con trỏ để trỏ vào một đối tượng đã tồn tại:

p_pt = &pt;

hoặc sử dụng toán tử new để cấp phát một đối tượng động trong vùng nhớ heap: p_pt = new Point;

Nếu lớp có một phương thức khởi tạo có tham số, chúng ta cần cấp đối số thích hợp khi sử dụng new.

Tài liệu giảng dạy Kỹ Thuật Lập Trình 2 Trang 73 //BankAccountMethods.cpp #include <iostream> #include <iomanip> #include <string> class Account {

// String representing the name of the account's owner std::string name;

// The account number int id;

// The current account balance double balance;

public:

// Initializes a bank account object

Account(const std::string& customer_name, int account_number, double amount):name(customer_name), id(account_number),

balance(amount) {

if (amount < 0) {

std::cout << "Warning: negative account balance\n"; balance = 0.0;

} }

// Adds amount amt to the account's balance. void deposit(double amt)

{

balance += amt; }

/* Deducts amount amt from the account's balance,if possible. Returns true if successful; otherwise, it returns false.

A call can fail if the withdraw would cause the balance to fall below zero

*/

bool withdraw(double amt) {

bool result = false; // Unsuccessful by default if (balance - amt >= 0)

{

balance -= amt;

result = true; // Success }

return result; }

// Displays information about the account object void display()

Tài liệu giảng dạy Kỹ Thuật Lập Trình 2 Trang 74

std::cout << "Name: " << name << ", ID: " << id << ", Balance: " << balance << '\n'; } }; int main() { Account acct1("Joe", 2312, 1000.00); Account acct2("Moe", 2313, 500.29); acct1.display(); acct2.display(); std::cout << "---------------------" << '\n'; acct1.withdraw(800.00); acct2.deposit(22.00); acct1.display(); acct2.display(); }

Khai báo một đối tượng và một con trỏ sau:

Con trỏ acct_ptr có thể dùng để trỏ vào một đối tượng đã tồn tại:

Hoặc dùng để trỏ tới một đối tượng cấp phát động:

Để truy cập tới thành phần của đối tượng mà con trỏ đang cịn lý có hai cách: Thứ nhất: dùng toán tử (.):

Tài liệu giảng dạy Kỹ Thuật Lập Trình 2 Trang 75

Thứ hai dùng toán tử (→):

Lưu ý khi dùng bộ nhớ động thì nên hủy bằng tốn tử delete để giải phóng vùng nhớ cho đối tượng.

Trong ví dụ này nếu chúng ta quên delete vùng nhớ cấp phát động thì sẽ xảy ra hiện tượng phân mảnh vùng nhớ (memory leak). Nếu chương trình kết thúc nhanh thì vấn đề này khơng đáng ngại so với chương trình chúng ta chạy dài hơn ví dụ như một web server, hiện tượng memory leak có thể gây ra sự sụp đổ sau một khoảng thời gian.

Khi chúng ta muốn tạo một danh sách các đối tượng thì sẽ tạo như sau:

Trong trường hợp này, khi chương trình khơng cịn cần sử dụng tới vector accts nữa thì phải thực hiện mã nguồn sau:

Một phần của tài liệu Tài liệu giảng dạy kỹ thuật lập trình 2 (Trang 76 - 79)

Tải bản đầy đủ (PDF)

(143 trang)