01/10/2018, 00:39
Class chứa class trong C++
#include <iostream>
#include <conio.h>
using namespace std;
class MangToaDo
{
public:
int n;
MangToaDo()
{
n = 0;
}
class ToaDo
{
public:
int x, y;
ToaDo() {}
ToaDo(int a, int b)
{
x = a;
y = b;
}
};
ToaDo mToaDo[10];
void ThemToaDo(ToaDo td)
{
mToaDo[n] = td;
n++;
}
};
int main()
{
MangToaDo mToaDo;
ToaDo td(3, 2); //không truy cập được
mToaDo.ThemToaDo(td);
getch();
return 0;
}
Trên đây là code của em về 2 class lồng nhau. Em muốn thực hiện được trong hàm main khai báo 1 ToaDo và thêm tọa độ đó vào trong Mảng Tọa Độ. Giả sử để public hết mà sao nó vẫn không có quyên truy cập đến class ToaDo ạ?
Sư huynh nào có thể giải đáp giúp em ạ!
Em xin chân thành cảm ơn.
Chúc các sư huynh 1 ngày code vui vẻ.
Bài liên quan
MangToaDo::ToaDo td(2, 3);
Nếu muốn là con trỏ thì
MangToaDo::ToaDo * td = new MangToaDo::ToaDo(2, 3);
Nhưng cái bài tập của em trong hàm main bắt buộc dùng câu lệnh ToaDo td(2, 3); :’((((
Nếu vậy thì mình thêm typedef vô trước hàm main nữa
typedef MangToaDo::ToaDo ToaDo;
Còn ko tạo cái class ToaDo bên ngoài luôn.
cảm ơn Sư huynh nhiều ạ :*
Cho em hỏi thêm xíu là cái typedef nó mang ý nghĩa là gì ạ?
Em xin chân thành cảm ơn.
Em làm phiền sư huynh quá
typedef có công dụng tạo tên giả cho một kiểu dữ liệu nào đấy.
Như bây giờ mình có con trỏ char = chuỗi (string)
thì thay vì mình ghi char * nhiều người ko hiểu or ngữ nghĩa nó ko tốt bằng, mình có thể tạo ra một tên giả khác cho nó bằng typedef
typedef char * string;
Thank sư huynh nhiều ạ
Sư huynh xem giúp em bài này với ạ.
Mục đích của em là khi gọi hs1.DoiTen(“Vy”); thì lập tức trong danh sách có hs1 sẽ đổi tên thành Vy.
Nhưng em không biết cách nào để có thể thay đổi ngay lập tức được. Em chỉ biết cách viết hàm cập nhật danh sách trong class LopHoc nhưng đề bài lại không cho phép @@~.
Truyền vào một tham chiếu tới cái biến đó
Như mình mình dùng con trỏ
Sửa vector
vector <HocSinh *> dshs;
Sửa hàm thêm học sinh
Và sửa một dòng trong LietKe…()
cout << dshs[i]->ten << "\t";
Và khi thêm ta làm như sau:
cảm ơn sư huynh rất nhiều. em sửa được rồi ạ
lại có vướng mắc rồi sư huynh ạ
Em chia source code bài kia thành 3 file BaiLam.h BaiLam.cpp Main.cpp
Em muốn thực hiện hs1.ChuyenLop(lh2); thì lh1 chứa hs1 sẽ bị xóa đi và lh2 sẽ thêm hs1 vào lớp. Nhưng hàm lại chỉ có 1 biến truyền vào là lh2 vậy làm sao có thể xử lý xóa nó ở lh1 ạ :’( giúp em với ạ :((
BaiLam.h
BaiLam.cpp
Main.cpp
Em cảm ơn sư huynh nhiều ạ :3
Mình thì sẽ tạo thêm 1 biến chứa lớp mà học sinh đang học ngay tại cái class hocsinh luôn và thêm hàm addClass vào.
LopHoc * myClass;
Cứ mỗi lần add học sinh thì trong hàm add viết thêm như thế này:
dshs.push_back(hs);
hs->addClass(this);
Lúc cần xài thì
myClass->dshs.remove …
thank you sư huynh :v thành công mỹ mãn =)))