Code OOP về tập hợp bị lỗi hàm nhập

em tập viết class như này .

#include <stdio.h> 
#include <math.h>
#include <iostream>

using namespace std;
class TapHop 
{
public :
	char name [20];
	int arr [];
	int n ;
	void Nhap (int arr[],int n)
	{
		cout <<"Nhap vao cac gia tri cua tap hop \n";
		for(int i=0; i < n; i++)
		cin >> arr[i];
	}
	void Xuat (int arr[], int n)
	{
		cout << "Tap hop co gia tri la";
		for(int i=0; i < n; i++)
		cout  << arr[i];
	}
};

 int main()
{
    TapHop set1;
	set1.n  = 5 ;
	cout << set1.n << endl ;
	int arr[set1.n];
	set1.Nhap (arr, set1.n);
	set1.Xuat (arr, set1.n);
	return 0;	
}

Em vừa mới sửa lại code sau khi tìm hiểu, khi run thì nó ko báo lỗi nhưng kết quả khi chạy ra ko ra đúng ý của em. Nó chỉ chạy hàm nhập còn hàm xuất nó chỉ xuất ra câu tập hợp có giá trị là chứ ko chạy code trong vòng for . Ý tưởng code này là n=5 thì nhập vào 5 số bất kỳ ví dụ : 1 2 3 4 5 , rồi xuất ra màn hình các số vừa nhập .

Vì bạn chưa hiểu về Hướng đối tượng đấy.
Xem cách bạn dùng n và khai báo 2 hàm (giờ là phương thức) thì cũng biết là bạn chưa hiểu gì hết.

  1. Biến n đã thuộc đối tượng rồi, các phương thức sẽ chỉ cần lấy n từ đối tượng hiện tại (this) mà không cần truyền tham số.
  2. Bạn nói OOP mà vẫn chưa biết gọi phương thức của đối tượng.
3 Likes

Làm sao bạn biết được nó không chạy vòng lặp bên trong?

Hint: Mới tập viết code thì bớt lười chút đi bạn, tập gõ từng dòng lệnh để còn hiểu chứ đừng có copy và paste nha :stuck_out_tongue:

3 Likes

Em tự tay viết tất cả anh ơi, không copy 1 cái nào luôn ấy . em run rồi mới biết nó ko chạy nó chỉ chạy dòng chữ tập hợp có giá trị là rồi dừng . CÒn khi em ko dùng opp thì chạy tất .

Bạn có dám khẳng định là không copy code từ hàm Nhap paste qua hàm Xuat không?

4 Likes

ax à ra là sai khúc đó do cái đó nó tương tự nhau nên em copy . ý của em lúc đó là ko có copy trên mạng . Anh cho em hỏi đoạn code trong hàm main cần tối ưu chỗ nào ko anh . Phát triển bài toán là thêm 2 phương thức , 1 là tạo ra subset em làm dc khi ko dùng opp 2 là so sánh 2 cái tập hợp

Code của bạn là sai cơ bản rồi (sau khi sửa cái cout kia vẫn sai), nên đừng nói đến chuyện tối ưu làm gì nhé.

Ngồi tối ưu một mớ sai thì chỉ ra một mớ sai hơn mà thôi :stuck_out_tongue:

3 Likes

C++ không có trò này đâu nhé.

2 Likes

em cũng thấy kỳ kỳ, cái đó là em tự mò gắn thử vào để xem nó có chạy được không ai ngờ nó chạy được . Nên em mới hỏi ở trên là có cách nào tối ưu hoặc sửa lại code sao cho nó nhìn hợp lý ko.

Bạn không cần sửa câu hỏi và đoạn mã của bạn nhiều vậy đâu. Khi nào hoàn chỉnh thì đăng 1 lần cho xong.
Mình thấy bạn biết gọi phương thức rồi.
Còn vài thứ:

  • Hàm dựng. Bạn có gán tên cho TapHop và khởi tạo mảng theo n. Đây là lúc dùng hàm dựng.
  • Các biến nên để trong private:.
  • Như đã nói trước, bạn vẫn còn để tham số cho n. Điều này vô lý, vô nghĩa quá đi chứ.
  • Bạn biết từ khóa new để làm gì không?
2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?