Hỏi về quan hệ Has-A trong thừa kế

129464320_203123537960382_2786812568366663326_n

Em có đề bài như trên ạ.
Em đang thắc mắc ở chỗ nhập xuất.
bên trong class lopSinhHoat có thuộc tính “danh sách đối tượng sinh viên” có kiểu (SinhVien *)
còn bên trong class SinhVien lại có thuộc tính “lớp” có kiểu (LopSinhHoat)

Vấn đề là khi nhập vào 1 thể hiện(instance) của class LopSinhHoat thì chắc chắn sẽ nhập danh sách các sinh viên(vì danh sách sinh viên là thuộc tính của LopSinhHoat)
Nhưng khi nhập danh sách sinh viên đó thì sẽ gọi đến phương thức nhập ( >> ) của class sinhVien -> ta phải nhập lại 1 cái lopSinhHoat (vì lớp- có kiểu LopSinhHoat - là một thuộc tính của class SinhVien)

Vậy em phải code như thế nào để giải quyết nó , mong các anh chị chỉ giáo ạ

SinhVien chỉ tham chiếu thôi. lopSinhHoat mới has-many.

Tức là nhập lớp trước rồi mới nhập SV.

3 Likes

là sao a, e vẫn chưa hiểu rõ lắm :thinking: :thinking: .

Khi thêm SinhVien vào mảng của LopSinhHoat thì gán con trỏ Lớp sang LopSinhHoat chứa sinh viên đó. Nó nên là con trỏ.


Z có 3 đứa con là A, B và C.
Z sẽ có mảng chứa (tham chiếu) 3 đứa con.
Ngược lại mỗi đứa con lại tham chiếu ngược về Z.
Cha phải có trước.

2 Likes

Có lẽ vì chậm hiểu nên e vẫn ko hiểu ý của anh cho lắm.
E thử code bên dưới ạ, a sửa giúp em với , thanks anh.

class classActivity{};

class student {
	string name;
	int age;
	double mark;
	classActivity NameClass;
public:
	student(){}
	friend istream& operator >> (istream& in, student& x) {
		cin >> x.name;
		cin >> x.age;
		cin >> x.mark;
		cin >> x.NameClass;
	}
};


class classActivity {
	string nameClass;
	student* st;
	int numberOfStudent;
public:
	
	classActivity() {};
	~classActivity() { delete[]st; }
	student& operator[] (int i) {return st[i]; }
	
	friend istream& operator >> (istream& in, classActivity& x) {
		
		cin >> x.nameClass;
		
		cin >> x.numberOfStudent;
		
		x.st = new student[x.numberOfStudent];
		for (int i = 0; i < x.numberOfStudent; i++) {
			cin >> x.st[i];
		}

	}
};

CHo tui hỏi rõ, một sinh viên chỉ tham gia vào một lopSinhHoat thôi đúng ko?

2 Likes

Bài này có mấy từ khóa liên quan cần tìm hiểu kỹ như sau: declaration, definition, friend function và forwarded declaration.

Còn đây là code demo:

struct ForwardDeclared;

struct UseIt{
    ForwardDeclared* ok;
    friend int f(const UseIt&); // should be define outside
};

// Define ForwardDeclared before all others the use ForwardDeclared
struct ForwardDeclared{
    int data;
};

int g(const ForwardDeclared& x){
    return x.data;
}

// Define friend function here
int f(const UseIt& x){
    return g(*x.ok);
}
2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?