Cách sử dụng kế thừa để xây dựng nên các lớp trong C++?

Xây dựng các lớp như mô tả dưới đây
 Xây dựng lớp HoaDon bao gồm:
Thuộc tính:

  • soLuong có kiểu int: Số lượng sản phẩm
  • giaCa có kiểu double: Giá sản phẩm
    Phương thức:
  • Một hàm tạo không đối để khởi tạo một hóa đơn gồm một sản phẩm, giá cả của sản phẩm là 10 USD
  • Một hàm tạo hai tham số HoaDon(int sl, double gc): Thiết lập giá trị số lượng và giá cả tương ứng bằng giá trị tham số
  • Hàm tongTien():Tổng tiền cho sản phẩm
  • Hàm setGiaCa(double giaMoi): Thiết lập giaCa bằng giaMoi
  • Hàm inHoaDon(): Dùng để in ra số sản phẩm, giá cả và tiền cần thanh toán.
     Xây dựng tiếp lớp HoaDonKM thừa kế từ lớp HoaDon. Nó có thêm các thuộc tính và phương thức sau
    Thuộc tính:
  • giamGia có kiểu double: Số tiền được khuyến mại
    Phương thức:
  • Hàm tạo không đối HoaDonKM(): Khởi tạo hóa đơn gồm 1 sản phẩm, giá sản phầm là 10 USD, giảm giá 2 USD
  • Một hàm tạo ba tham số HoaDonKM(int sl, double gc, double gg): Thiết lập giá trị số lượng và giá cả và tiền giảm giá tương ứng bằng giá trị các tham số
  • Hàm thanhToan(): Tính số tiền khách hàng cần thanh toán (Gợi ý: Sử dụng hàm tongTien thừa kế từ lớp HoaDon)
  • Định nghĩa lại hàm inHoaDon cho phù hợp (in ra cả thông tin về tiền khuyến mại)
    Gợi ý: Có thể sử dụng hàm inHoaDon của lớp cơ sở
    Viết hàm main để sử dụng các lớp nói trên
2 Likes

Hỏi như này thì ai dám làm hộ :smile:

2 Likes

Diễn đàn này đâu phải để post đề bài rồi nhờ người khác làm giùm :trollface:

2 Likes

Có bài làm trước chưa bạn, đề bạn dài quá, làm biếng làm lắm :smiley:

2 Likes

dễ mà từ từ làm bạn ơi. có gì k ổn thì đưa lên hỏi chứ ai lại kêu nta làm hộ luôn z =D

1 Like

ok. Mình biết rồi. Tại mới tham gia lần đầu chưa có kinh nghiệm lắm. Các bạn thông cảm !!

3 Likes

bạn đọc meta đi. đọc xong đảm bảo ok

3 Likes

vào dẫn link a @ltd ơi. :kissing_smiling_eyes:

1 Like

Vừa nhìn lướt qua 1 lượt. Nhìn xong rồi, cho phép em … :running: :running: :running:

2 Likes

:running: :running: :running: :running: bài này mình chỉ làm đc 60%

1 Like

Bạn có thể post lên cho mình xem được không…?? Mình chỉ làm được 2 phương thức cuối trong class HoaDon thôi. Mong bạn giúp !.

#include<iostream>
using namespace std;
class HoaDon
{
	private:
		int soLuong;
		double giaCa;
	public:
		void setGiaca();
		void inHoadon();
};
/*<Kiểu dữ liệu> <Tên Class> :: <Tên phương thức(Danh sách tham số nếu có)>*/
void HoaDon::setGiaca()
{
	do{
		cout << "Nhap vao so luong: ";
		cin >> soLuong;

		if(soLuong < 0)
		{
			cout << "So luong khong hop le. Xin kiem tra lai !"<<endl;
		}
	}while(soLuong < 0);

	do{
		cout << "Nhap vao gia tien: ";
		cin >> giaCa;

		if(giaCa < 0)
		{
			cout << "Gia tien khong hop le. Xin kiem tra lai !"<<endl;
		}

	}while(giaCa <0);
}
void HoaDon::inHoadon()
{
	double giaMoi = soLuong * giaCa;
	cout << "\n\n\t\t*Thong Tin Hoa Don Cua Ban"<<endl<<endl;
	cout << "So luong: " << soLuong<<endl;
	cout << "Don gia: " << giaCa<<endl;
	cout << "So tien can thanh toan: " <<giaMoi<<endl;
}
int main()
{
	HoaDon x;
	x.setGiaca();
	x.inHoadon();
	system("PAUSE");
	return 0;
}

Lần đầu bạn tham gia mình sẽ sửa lại cách up code giúp bạn nhé. Xem hướng dẫn up code lên diễn đàn tại đây How to post your code on DNH

2 Likes

Cảm ơn bạn đã giúp mình !!!

2 Likes

Bạn thiếu constructor hay hàm tạo nhé. làm từ từ mình chỉ tiếp.

1 Like

Sau một hồi mày mò mấy bài của topic cũ thì minh chỉnh sửa lại được như thế này… Nhưng không thể chạy được… Vì mình không biết định nghĩa cái void setGiaCa(double giaMoi). Mong bạn chỉ giúp mình :blush:

#include<iostream>
using namespace std;
class HoaDon
{
private:
	int soLuong;
	double giaCa;
public:
	HoaDon();
	HoaDon(int sl, double gc);
	double tongTien();
	void setGiaCa(double giaMoi);
	void inHoadon();
};
int main()
{
	HoaDon hoaDon(3, 1000);
	cout << "\nThong tin hoa don: ";
	hoaDon.inHoadon();
	cout <<endl;
	cout << "Moi nhap thong tin hoa don cua ban: ";
	HoaDon hoaDon2;
	hoaDon2.setGiaCa();
	cout << "\n\n\t\t* Thong tin hoa don cua ban: ";
	hoaDon2.inHoadon();
	cout <<endl;
	system("PAUSE");
	return 0;
}
HoaDon::HoaDon() : soLuong(1), giaCa(10){
}
HoaDon::HoaDon(int sl, double gc) : soLuong(sl), giaCa(gc){
}
double HoaDon::tongTien(){
	int sl;
	double gc;
	double tongTien = sl * gc;
	return sl * gc;
}
void HoaDon::setGiaCa(double giaMoi)
{
	giaCa = giaMoi;
	cin >> giaCa;
}
	
void HoaDon::inHoadon(){
	cout << "\nSo luong: "<<soLuong;
	cout << "\nGia cua 1 san pham: "<<giaCa;
	cout << "\nTong tien can thanh toan: "<<tongTien();
}
1 Like

Thứ nhất là hàm setGiaCa(double) của bạn có 1 tham số, nhưng trong hàm main bạn gọi hàm với không đối số truyền vào?

void HoaDon::setGiaCa(double giaMoi) // có 1 tham số

hoaDon2.setGiaCa(); // không đối số.???
2 Likes

Mình đã sửa lại giống bạn nhưng vẫn không được. Nó bão lỗi thế này :
e:\c++\emty project\emty project\bai2.cpp(23): error C2144: syntax error : ‘double’ should be preceded by ‘)’
1>e:\c++\emty project\emty project\bai2.cpp(23): error C2660: ‘HoaDon::setGiaCa’ : function does not take 0 arguments
1>e:\c++\emty project\emty project\bai2.cpp(23): error C2059: syntax error : ‘)’

Lỗi dòng 23. Bạn thừa hoặc thiếu 1 dấu ). và bạn chưa truyền đối số

1 Like

Mình đã dùng thử mọi cách nhưng vẫn không được bạn ạ…Chắc phải nghiên cứu thêm đã. Cảm ơn bạn đã giúp mình ! :blush:

1 Like

Nhìn qua thì còn 3 chỗ phải sửa. Bạn có chắc sửa lỗi đầu tiên dạng như thế này?

hoaDon2.setGiaCa(2000);
1 Like

Nghĩa là mình truyền vào cho nó 1 tham số bất kì nào cũng được à. Nhưng mình nghĩ cái giaMoi là nhập từ bàn phím chứ. Thật ra phần class HoaDon mình cũng chưa hieur nó yêu cầu cái gì lắm. Nhất là cái double tongTien() vs cái void setGiaCa

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