30/09/2018, 16:16

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
TTmagic viết 18:20 ngày 30/09/2018

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

X viết 18:24 ngày 30/09/2018

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

Lê Đình Huy viết 18:24 ngày 30/09/2018

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

Độc Hành viết 18:21 ngày 30/09/2018

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

Thành Nam viết 18:30 ngày 30/09/2018

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 !!

Thực tế khắc nghiệt viết 18:27 ngày 30/09/2018

Các bạn thông cảm

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

Sáng Béo viết 18:20 ngày 30/09/2018

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

viết 18:25 ngày 30/09/2018

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

Thực tế khắc nghiệt viết 18:25 ngày 30/09/2018

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

Thành Nam viết 18:31 ngày 30/09/2018

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 diễn đàn

Thành Nam viết 18:16 ngày 30/09/2018

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

Đỗ Trung Quân viết 18:30 ngày 30/09/2018

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

Thành Nam viết 18:24 ngày 30/09/2018

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

#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();
}
Đỗ Trung Quân viết 18:25 ngày 30/09/2018

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ố.???
Thành Nam viết 18:26 ngày 30/09/2018

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 : ‘)’

Đỗ Trung Quân viết 18:22 ngày 30/09/2018

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ố

Thành Nam viết 18:27 ngày 30/09/2018

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 !

Đỗ Trung Quân viết 18:22 ngày 30/09/2018

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);
Thành Nam viết 18:30 ngày 30/09/2018

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

Thành Nam viết 18:28 ngày 30/09/2018

Mình để code như thế này:

#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 << "Thong tin hoa don: ";
	hoaDon.inHoadon();
	cout <<endl;
	cout << "Moi nhap thong tin hoa don cua ban: ";
	HoaDon hoaDon2;
	hoaDon2.setGiaCa(2000);
	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(){
	
	double tongTien = soLuong * giaCa;
	return soLuong * giaCa;
}
void HoaDon::setGiaCa(double giaMoi)
{
	giaCa = giaMoi;
}
	
void HoaDon::inHoadon(){
	cout << "\nSo luong: "<<soLuong;
	cout << "\nGia cua 1 san pham: "<<giaCa;
	cout << "\nTong tien can thanh toan: "<<tongTien();
}

Nó chạy được và ra là:

Thông tin hóa đơn:
Số lượng: 3
Giá của 1 sản phẩm: 1000
Tổng tiền cần thanh toán: 3000
Mời bạn nhập thông tin hóa đơn của bạn
Thông tin hóa đơn của bạn
Số lượng: 1
Giá của 1 sản phẩm: 2000
Tổng tiền cầ thanh toán: 2000.
Hết______________________________________
Vậy làm sao để nhập giá cả từ bàn phím được hả bạn??

Bài liên quan
0