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

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

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

1 Like

:stuck_out_tongue:
Tham số khác đối số nhé bạn

hàm  setGiaCa(double x)  // x o day la tham so
nhung khi ban goi hàm tu nơi khac hoadon.setGiaCa(double y) // y = 2000 la doi so dc truyen vao

Bạn nên suy nghĩ hiểu đề trước đã.
Class HoaDon để thể hiện các instance hóa đơn mà ở đây có giá và số lượng

1 Like

Nếu bạn muốn nhập giá cả từ bàn phím thì trong hàm setGiaca(double giaca) bạn phải cho người dùng nhập vào chứ không phải là gán luôn giá trị.

Vậy bài này không cần nhập giá cả từ bàn phím đúng không. Chỉ cần in ra màn hình đúng không bạn?

Nhưng mình không biết cái hàm setGiâC(double giaMoi) phải viết thế nào… Bạn giúp mình với.

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