Nhờ tối ưu hóa đoạn code

em đang học OOP về việc khai báo đối tượng cho tam giác trong mặt phẳng và có đoạn code thế này

#include <iostream>
using namespace std;
class CDiem {

private:
	float x;
	float y;
	float z;
public:
	friend istream& operator>>(istream&, CDiem&);
};
istream& operator>>(istream& is, CDiem& I) {
	cout << "Nhap x ";
	is >> I.x;
	cout << "Nhap y ";
	is >> I.y;
	cout << "Nhap z ";
	is >> I.z;
	return is;
}

class CTamGiac:public CDiem{

private:
	CDiem A;
	CDiem B;
	CDiem C;
public:
	// PT khoi tao
	void Nhap();
	friend istream& operator>>(istream&, CDiem&);
};
void CTamGiac::Nhap() {
	cout << "Nhap toa do diem A\n";
	cin >> A;
	cout << "Nhap toa do diem B\n";
	cin >> B;
	cout << "Nhap toa do diem C\n";
	cin >> C;
}
istream& operator>>(istream& is, CTamGiac& I) {
	I.Nhap();
	return is;
}
int main() {

	return 0;
}

ở hàm istream& operator>>(istream& is, CTamGiac& I) có cách nào truy cập từng điểm A,B,C qua toán tử nhập >> tương tự như trên hàm istream& operator>>(istream& is, CDiem& I) truy cập từng giá trị x,y bên trên không hay chỉ làm kiểu void CTamGiac::Nhap(). Do khi em khai báo như thế này thì không đúng.

istream& operator>>(istream& is, CTamGiac& I) {
	cout << "Nhap diem A ";
	is >> I.A;
	cout << "Nhap diem B ";
	is >> I.B;
	cout << "Nhap diem C ";
	is >> I.C;
	return is;
}

ai có gợi ý hay gạch đá em xin nhận : v

class CTamGiac:public CDiem

kế thừa tầm bậy. Tam giác nào là điểm??

istream& operator>>(istream& is, CDiem& I) {
	cout << "Nhap x ";

sao trong operator<< lại có cout?? Tương tự với class CTamGiac.

4 Likes

Chà! Bạn đủ gạch để xây biệt thự cao cấp luôn đấy.

Trong mặt phẳng mà có cả z luôn vậy?


Làm vầy không được rồi! Toán tử thực hiện việc của nó là nhập thôi, kéo cout vào làm gì?


Tam giác chứa 3 điểm, nó không phảimột điểm.


2 hàm này chả phải là 1 à? Mà tham số thứ 2 phải là CTamGiac& chứ!
Lớp phía trên kéo cout vào, lớp dưới kéo cả cin vào luôn. Nên thành ra:

istream& is chỉ để “trưng” cho có. Bạn không dùng đến nó luôn.

5 Likes

à chuyện operator>> có cout đó để làm cảnh thôi ạ! để khi xuống hàm main gõ

CDiem I;
cin>>I;

nó ra như thế này

còn cái kế thừa trên đúng tầm bậy thật. Em chịu :))

  1. cái đó chính là cái em muốn hỏi đấy. Liệu có cách nào nhập tọa độ từng điểm A, B, C qua 1 mình hàm istream& is ko thôi, không cần dùng hàm void Nhap() .

  2. Em lộn phải là gốc tọa độ mới phải.

  3. vụ cout như đã nói .

  4. Khúc kế thừa là sai, em nhận.

  5. không sao đâu, lúc đăng topic là xác định ăn gạch rồi với lại em mặt khá dày :))

Khi bạn truyền ifstream (file) mà xuất ra cout thì rất là kì cục.

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