1. Xây dựng các lớp theo phân cấp thừa kế như sau:
Diem
DiemMau Diem3C
Diem3CMau
class Diem3C : public Diem {
int z; //Tọa độ chiều thứ 3
public: . . . }
2. Xây dựng các lớp có quan hệ thừa kế như sau:
class Luanvan //Lớp luận văn
{ private:
char tenlv[31]; //Tên luận văn
char tensv[31]; //Tên sinh viên int nbv; //Năm bảo vệ
public:
Luanvan (); void Nhap(); void Xuat(); };
class GVHDLV:public GiaoVien //Lớp giáo viên hướng dẫn luận văn
{ private:
int slv; //số luận văn
Luanvan *p; //Con trỏ tới vnđ chứa các luận văn
public:
GVHDLV(); ~GVHDLV();
GVHDLV(const GVHDLV &u); void Nhap();
void Xuat();
GVHDLV operator=(const GVHDLV &u); //Toán tử gán
};
Hướng dẫn:
void GVHDLV::Nhap() { GiaoVien::Nhap(); cout << “So luan van”; cin >> slv;
cin.ignore();
p = new LuanVan[slv]; for(int i = 0; i < slv; i++) {
cout << “Luan van thu << i <<”\n”; p[i].Nhap(); //Goi luanVan::Nhap() }
}
void GVHDLV::Xuat() { GiaoVien::Xuat();
for(int i = 0; i < slv; i++)
p[i].Xuat(); //Goi luanVan::Xuat() }
GVHDLV ::GVHDLV( const GVHDLV &u) : GiaoVien(u) { cout << “GVHDLV ::GVHDLV( GVHDLV &u)\n”; slv = u.slv; p = new LuanVan[slv]; for(int i = 0; i < slv; i++) p[i] = u.p[i]; }
GVHDLV & GVHDLV::operator=(const GVHDLV &u) { cout << “goi ham GVHDLV::operator=()\n”; if(p!= NULL) {
delete[]p; p = NULL; }
//Gán các thành phần mà lớp GVHDLV thừa kế
*((GiaoVien *)this) = (GiaoVien&)u; /*Gọi GiaoVien::operator=(GiaoVien&)*/ //Gán các thành phần bổ sung của lớp GVHDLV slv = u.slv; p = new LV[slv]; for(int i = 0; i < slv; i++) p[i] = u.p[i]; return *this; }
3. Xây dựng các lớp theo phân cấp thừa kế như sau:
Cap
MTV Vector
class Cap {
static int n; /*Dùng chung cho đối tượng MTV và đối tượng Vector*/ public:
void Nhap(); int LayN(); };
int Cap::n = 0; //Khởi tạo thành phần dữ liệu static
class Vector; //Khai báo trước lớp Vector
class MTV:public Cap //Lớp ma trận vuông
{ private: double arr[SIZE][SIZE]; public: void Nhap(); void Xuat();
Vector operator*(const Vector &u); //Toán tử nhân MTV với Vector
};
class Vector:public Cap {
private:
double arr[SIZE]; public:
void Nhap(); void Xuat();
friend Vector MTV::operator*(const Vector &u); /*khai báo bạn lớp Vector*/ }; Hướng dẫn: void MTV::Nhap() { int n; n = LayN(); if(n == 0) { Cap::Nhap(); n = LayN(); } for(int i = 0; i < n; i++) for(int i = 0; i < n; i++) { cout <<”pt[“ << i <<”][“ << j <<”]=”; cin >>arr[i][j]; } } void Vector::Nhap() { int n; n = LayN(); if(n == 0) { Cap::Nhap(); n = LayN(); } for(int i = 0; i < n; i++) { cout <<”pt[“ << i <<”]=”; cin >>arr[i]; } }
Hinh
Hinh2C Hinh3C
Tron vuong TGDeu Cau LapPhuong
class Hinh { public:
virtual double DienTich() = 0;
virtual void Xuat() = 0; //Xuất thông tin của hình };
class Hinh2C : public Hinh { public:
virtual double ChuVi() = 0; };
class Hinh3C : public Hinh { public:
virtual double TheTich() = 0; };
class Tron : public Hinh2C { private: double r; public: Tron(double rr); double DienTich(); double ChuVi(); void Xuat(); };
class Vuong : public Hinh2C { . . .
};
class TGDeu : public Hinh2C { . . .
};
private: double r; public: Cau(double rr); double DienTich(); double TheTich(); void Xuat(); };
class LapPhuong : public Hinh3C { . . .
};
Lưu ý:
DT(Cầu) = 4*PI*r2 TT(Cầu) = PI*r3/4
DT(L.phương) = 6*a2 TT(L.Phương) = a3
DT(TG.đều) = a2*sqrt(3)/2 CV(TG.Đều) = 3a
5. Xây dựng các lớp theo phân cấp thừa kế như sau:
NV
NVVP NVBH NVSX
clas NV { //Lớp nhân viên private:
char msnv[21]; //Mã số nhân viên char ht[31]; //Họ tên
double ml; //Mức lương
int loai; /*Loại nhân viên = 0: nhân viên văn phòng, 1:nhân viên bán hàng, 2:nhân viên sản
xuất*/
public: NV();
virtual void Nhap(); virtual void Xuat();
virtual double TienThuong() = 0; };
private:
double tgct; //Thời gian công tác tính theo tháng public: NVVP (); void Nhap(); void Xuat(); double TienThuong(); };
clas NVBH : public NV { //Lớp nhân viên bán hàng private: double hst; //Hệ số thưởng public: NVBH (); void Nhap(); void Xuat(); double TienThuong() ; };
clas NVSX : public NV { //Lớp nhân viên sản xuất
private:
double tssp; //Tổng sàn phẩm tính từ đầu năm
public: NVSX (); void Nhap(); void Xuat(); double TienThuong(); }; //Hàm chính void main() {
NV *pnv[20]; //Mảng các con trỏ kiểu lớp trừu tượng
int n; //Lưu số nhân viên
int loai; //0: nvvp, 1: nvbh, 2:nvsx int i; <Nhap n> for(i = 0; i < n; i++) { do { <Nhap loai>
} while(loai < 0 || loai > 2); if(loai == 0)
pnv[i] = new NVVP; else if(loai == 1)
pnv[i] = new NVBH; else pnv[i] = new NVSX; pnv[i] -> Nhap();
}
for(i = 0; i < n; i++) {
cout << “ ** Nhan vien thu “ << i <<” **\n”; pnv[i]->Xuat();
cout <<”Tien luong: “ << pnv[i]->TienLuong() << “\n”; }
}
Lưu ý: Tiền thưởng được tính theo quy tắc sau: Đối với nhân viên văn phòng
nếu tgct < 6 thì tiền thưởng = 100000
ngược lại tiền thưởng = 200000 + ml * 10% * tgct/6 Đối với nhân viên bán hàng
tiền thưởng = 150000 * hst Đối với nhân viên sản xuất