01/10/2018, 12:06

OOP C++: Giúp em vài vấn đề với

Đề bài như sau: Xóa phần tử trùng trong mảng
Nhưng em code đến đoạn này thì không biết return kết quả sao cho đúng tại vì nếu return a[m_length] thì nó không cho can thiệp vào thuộc tính của Class nên bị lỗi. Giúp e xuất ra kq sau khi xóa với ạ !

CIntArray CIntArray::Remove()
{
int m=m_Length;	
	
	for(int i=0;i<m_Length;i++)
	{
		for(int j=i+1;j<m_Length;i++)
		{
		if(a[i]==a[j])
	{
		XoaPhanTu(a,m,j);
	}
		j--;
		}
	}
}
void CIntArray :: XoaPhanTu(int a[],int &n, int ViTriXoa)
{
	for(int i=ViTriXoa;i<n;i++)
	{
		a[i]=a[i+1];
	}
	n--;

}
Dark.Hades viết 14:10 ngày 01/10/2018

Bạn dùng class rồi thì sao cần phải cho tham biến là phần tử của class làm gì, ở hàm XoaPhanTu chỉ cần 2 biến là được rồi, lúc gọi m_ thì gọi bình thường thôi, đặt public thì có thể gọi ở mọi nơi

Dùng method chaining nhưng không trả về this thì dùng làm gì @@

Đinh Đăng Khoa viết 14:09 ngày 01/10/2018
CIntArray CIntArray::Remove()
{
	for(int i=0;i<m_Length;i++)
	{
	 if(a[i]==a[i+1])
		 XoaPhanTu(a,i);
	}
}
void CIntArray :: XoaPhanTu(int a[], int ViTriXoa)
{
	for(int i=ViTriXoa;i<m_Length;i++)
	{
		a[i]=a[i+1];
	}
}

Sửa vậy đúng chưa ạ ? Tại e mới học về OOP nên hơi yếu ! Sau dòng XoaPhanTu(a,i) muốn trả kq về thì sao ạ,

Dark.Hades viết 14:09 ngày 01/10/2018

if(a[i]==a[i+1])

Biến a ở đây bạn lấy ở đâu?

Đề bài như thế nào, class này quản lí array bất kì hay là quản lí 1 array duy nhất của nó?

Code header của class ấy đâu?

Đinh Đăng Khoa viết 14:16 ngày 01/10/2018
 file "CIntArray.h"
{
private:
	int a[100];
	int m_Length;
public:
	CIntArray();
	void InputArray();
	void OutputArray();
	CIntArray Remove();
	void XoaPhanTu(int a[],int VTX);
	CIntArray(const CIntArray &a);
};

File "Array.cpp"
CIntArray::CIntArray()
{
	m_Length=0;
	cout<<"oke";
}

void CIntArray::InputArray()
{
	int n;
	cout<<"Nhap do dai mang: ";
	cin>>n;
	m_Length=n;
	cout<<"Nhap gia tri mang ";
	for(int i=0;i<n;i++)
	{
		cin>>a[i];
	}
}
void CIntArray::OutputArray()
{
	cout<<"Gia tri cua mang: ";
	for(int i=0;i<m_Length;i++)
	{
		cout<<" "<<a[i];
	}
}
CIntArray CIntArray::Remove()
{
	for(int i=0;i<m_Length;i++)
	{
	 if(a[i]==a[i+1])
		 {XoaPhanTu(a,i);
	 
	}
	}

}
void CIntArray :: XoaPhanTu(int b[], int ViTriXoa)
{
	for(int i=ViTriXoa;i<m_Length;i++)
	{
		b[i]=b[i+1];
	}
	m_Length--;

}

Đề bài là Xóa các phần tử trùng trong mảng ạ

Dark.Hades viết 14:17 ngày 01/10/2018

void CIntArray :: XoaPhanTu(int b[], int ViTriXoa)

Hàm này bạn chỉ cần 1 tham biến là int ViTriXoa là được rồi.[quote=“Dinh_Dang_Khoa, post:6, topic:56683”]
for(int i=0;i<m_Length;i++)
{
if(a[i]==a[i+1])
{XoaPhanTu(a,i);

}
}

[/quote]

Hàm này dùng 2 vòng for để duyệt mảng rồi tìm, sau đó xóa vị trí i là được

Đinh Đăng Khoa viết 14:21 ngày 01/10/2018

vậy ở CIntArray CIntArray::Remove() thì return gì ạ ?

Dark.Hades viết 14:21 ngày 01/10/2018

Hàm đấy void là được rồi, chỉ là hàm thực hiện xóa các đối tượng trùng nhau trong mảng thôi mà, mảng của bạn là CIntArray.a, đâu cần để ý làm gì, cần thiết thì dùng bool để kiểm tra nếu xóa false hay true (Cái này tùy tư duy người code)

Đinh Đăng Khoa viết 14:14 ngày 01/10/2018

Done. Cảm ơn sư huynh !! Mới vào môn OOP nên hơi bị ngáo tí ạ

Dark.Hades viết 14:12 ngày 01/10/2018


Bài liên quan
0