Con trỏ cấu trúc

E xem mấy video của A @ltd ko thấy mục này.
a có thể làm 1 video hướng dẫn học phần này được ko ạ?
e loay hoay cả ngày mà vẫn ko hiểu. :frowning:

2 Likes

Anh chưa làm phần này, em có thể coi phần class tạm tạm, cũng giống như struct thôi. Trong video về Class anh đã nói là trong C++ Class giống struct. Chỉ khác là class các member của nó mặc định là private

2 Likes

nhưng không có con trỏ tới class (cấu trúc) a ạ. :frowning:

E cứ ngĩ, class cũng chỉ là 1 kiểu dữ liệu (mà do người dùng định nghĩa. Các kiểu dữ liệu như int thì do ngôn ngữ C/C++ nó định nghĩa). Nên cách dùng cũng gần giống mà e.

Có đoạn code về Pointer of Class. E thử đọc xem có hiểu thêm dc gì không

    // pointer to classes example
    #include <iostream>
    using namespace std;
    
    class Rectangle {
      int width, height;
    public:
      Rectangle(int x, int y) : width(x), height(y) {}
      int area(void) { return width * height; }
    };
    
    
    int main() {
      Rectangle obj (3, 4);
      Rectangle * foo, * bar, * baz;
      foo = &obj;
      bar = new Rectangle (5, 6);
      baz = new Rectangle[2] { {2,5}, {3,6} };
      cout << "obj's area: " << obj.area() << '\n';
      cout << "*foo's area: " << foo->area() << '\n';
      cout << "*bar's area: " << bar->area() << '\n';
      cout << "baz[0]'s area:" << baz[0].area() << '\n';
      cout << "baz[1]'s area:" << baz[1].area() << '\n';       
      delete bar;
      delete[] baz;
      return 0;
    }

Link nè e : http://www.cplusplus.com/doc/tutorial/classes/

2 Likes

Vẫn có con trỏ tới class chứ @htwap. Đọc thêm bài của Tuấn :smile:

1 Like

ý e là e ko thấy video ấy a ạ

e không hiểu lắm ạ.
cái này nhiều chỗ khó hiểu quá.
a giải thích cho e thêm về cái class này đc ko ạ.

Giải thích như thế nào dc nhỉ, chắc e fai nói a e chưa hiểu chỗ nào. Nếu e hiểu dc con trỏ kiểu int thì e sẽ hiểu con trỏ kiểu ‘class’, vì chúng đều giữ địa chỉ ô nhớ. Có khác biệt nhất là class có nhiều thành phần (thuộc tính, phương thức…), muốn truy xuất tới các thành phần đó thì ta dùng dấu -> thay vì dấu . như cách không dùng con trỏ.

e ko hiểu cách hoạt động của class này ạ.
chỗ này ạ.

 Rectangle(int x, int y) : width(x), height(y) {}

Cái này không liên quan đến con trỏ, lần sau em nên tạo topic khác để hỏi.

đây là hàm dựng, gán width = x, height = y.

e thấy a ấy post code trong top này thì tiện e hỏi a ấy luôn ạ.
hàm dựng tức là mình viết {tên_biến}([giá_trị]) thì biến sẽ nhận giá trị là tham số mình truyền vào ạ?
có dùng trong main hay hàm khác đc ko a?

Hàm dựng khác hàm main và các hàm khác. Chỉ sử dụng trong Class và chỉ có hàm cùng tên với Class mới gọi là hàm dựng. Đây là một hàm đặc biệt.

Em xem các bài nói về hàm dựng ở đây.

1 Like

vâng, cái hàm dựng thì e hiểu rồi.
e chỉ ko hiểu cách viết này ạ:

: width(x), height(y)

Đây là cách khởi tạo giá trị như anh đã nói. Tên tiếng anh của nó là “Initialization Lists”.

Rectangle(int x, int y) : width(x), height(y) {}

Tương đương

Rectangle(int x, int y){
     width = x;
     height = y;
}

Cái đặc biệt là việc khởi tạo như thế này giúp cho ta có thể gán giá trị cho biến const và biến reference. Hãy thử Bài tập: tạo ra biến const thuộc về Class và gán giá trị cho nó.

Và “Initialization Lists” là cách làm đúng khi sử dụng hàm dựng (constructor). Trong một trường hợp khởi tạo cho biến là Class mà dùng “Initialization Lists” thì ta sẽ làm cho việc khởi tạo nhanh hơn.

Lý do tại sao xem thêm ở đây

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?