01/10/2018, 11:12

Cách truyền con trỏ class vào trong hàm

Chào mọi người!
Mình đang học về con trỏ nhưng chưa hiểu rõ lắm nên có 1 vài thắc mắc như sau:

  1. Dùng con trỏ vào hàm thì có giúp chương trình chạy được nhanh hơn không?
  2. Có nên lúc nào cũng dùng con trỏ hay khi bắt buộc thì mới dùng?
  3. Mình muốn truyền class vào trong hàm nhưng không được. Khắc phục bằng cách nào? Code chương trình:
#include <iostream>
using namespace std;

class A
{
public:
	float diemTB()
	{
		return 1.0;
	}
};

void foo(A *data[])
{
	cout << data[0]->diemTB();
}

int main()
{
	A a[2];
    foo(a); //error
	system("pause");
	return 0;
}

Khoa Nguyễn Anh viết 13:27 ngày 01/10/2018

Hello bạn
Mình thấy ở hàm foo thì bạn bỏ vào là một A* [] nhưng ở hàm main bạn chỉ khai báo là A[] thôi nên khi đưa vào hàm foo no sẽ sai kiểu nhận vào. Cách khắc phục là khai báo biến a thành con trỏ. À bạn cần phân biệt giữa class và object của class. Ví dụ cho dễ hiểu nhé:

class Man {
public:
 std::string name;
}

int main() {
 Man walkalone2305;
 std::cout << walkalone2305.name;
}

Theo đoạn code trên thì Man là một class, còn biến walkalone2305 là một đối tượng tạo ra từ class Man.

Đồng thời mình trả lời giúp bạn hai câu kia.
1.Nếu bạn cho con trỏ vào thì chương trình vẩn coppy biến của bạn ra chổ khác và thực hiện trên biến này nên mình nghĩ khi cho pointer vào cũng không giúp chương trình nhanh thêm. Nếu bạn muốn nhanh thì bạn cho địa chỉ của biến vào (&), khi cho địa chỉ vào thì chương trình sẽ không coppy biến đó ra vùng nhớ mới nên sẽ nhanh hơn.

2.Khi nào cần dùng pointer thì mình nghĩ khi biến đó là một kiểu mảng.

Dark.Hades viết 13:20 ngày 01/10/2018
  1. https://stackoverflow.com/questions/270408/is-it-better-in-c-to-pass-by-value-or-pass-by-constant-reference
  2. Dùng khi bạn hiểu bạn đang làm gì, và học C++ đồng nghĩa bạn phải làm việc với con trỏ thường xuyên
  3. Đọc lỗi khi compiled là bạn sẽ hiểu
Bài liên quan
0