30/09/2018, 16:18

Mong mọi người giúp em bài C++ về class này với ạ

Đề bài:
Xây dựng lớp CPU là lớp biểu diễn con chip của máy vi tính. Lớp CPU có các thuộc tính và phương thức sau:
Thuộc tính:
double tocDo: Xung nhịp tính theo GHz của con chip
Phương thức
Hàm tạo một đối CPU(double s): Khởi tạo cho tốc độ của chip là s
Hàm sucManh(): Trả lại giá trị của biến tocDo
Hàm xepHang(): xét xem giá trị do hàm sucManh() trả lại có lớn hơn 3 hay không. Nếu lớn hơn 3 thì in ra thông điệp “Chip này rất mạnh”;
Xây dựng lớp Core2Dual thừa kết từ lớp CPU. Lớp này không có thêm thuộc tính gì cả.
Phương thức:
Hàm tạo có một đối số Core2DualT(double s): Khởi tạo cho tốc độ chip là s
Định nghĩa lại phương thức sucManh sao cho phương thức này trả lại giá trị bằng 2 * tocDo.
a. Viết hàm main sử dụng các lớp này như sau:
Khai báo một biến thuộc lớp Core2Dual như sau:
Core2Dual aChip(2);
Gọi phương thức xepHang trên đối tượng aChip này.
b. Thay đổi chương trình như sau:
Khai báo phương thức sucManh ở lớp CPU là phương thức ảo
Biên dịch và chạy chương trình => Kết luận
Biên dịch và chạy chương trình.

Code của em đây.

#include<iostream>

using namespace std;

class CPU{
protected:
	double tocDo;
public:
	CPU(double s);
	double sucManh();
	void xepHang();
};
class Core2Dual: public CPU{
public:
	Core2Dual(double s);
	double sucManh();
};
int main()
{
	Core2Dual aChip(2);
	aChip.xepHang();
	cout<<endl;
	system("pause");
	return 0;
}
CPU::CPU(double s):tocDo(s){
}
double CPU::sucManh(){
	return tocDo;
}
void CPU::xepHang(){
	if(tocDo >3)
	{
		cout <<"Chip nay rat manh. ";
	}
	else
	{
		cout <<"Chip nay yeu. ";
	}
}
Core2Dual::Core2Dual(double s):CPU(s){
}
double Core2Dual::sucManh(){
	return 2*tocDo;
}

Nếu em viết trương trình này thì nó phải ra: “Chip nay rat manh” đúng không ạ… Nhưng em chạy thì nó ra chip này yếu… Vậy không biết em sai chỗ nào, mong mọi người giúp đỡ.

viết 18:25 ngày 30/09/2018
int main()
{
	Core2Dual aChip(2); //Problem is here
	aChip.xepHang();
	cout << endl;
	system("pause");
	return 0;
}
[/quote]

Bạn truyền giá trị cho constructor là 2 ( < 3 ) thì nó in ra chip yếu là đúng rồi chứ sao nữa. Khởi tạo giá trị 4 5 6 … xem nó in ra gì.

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

cho tham số là 2 trong khi dk mạnh là phải lớn hơn 3. =)))

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

Mình đang gọi hàm Core2Dual trả về giá trị là: tocDo*2 mà bạn.

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

À đây rồi, bạn code không có cách nhau giữa các hàm với lớp nên mình khó nhìn quá (mắt mờ). Bạn xem lỗi mình đã sửa ở phần dưới và có giải thích.

#include<iostream>

using namespace std;

class CPU{
protected:
	double tocDo;
public:
	CPU(double s);
	double sucManh();
	void xepHang();
};

class Core2Dual: public CPU{
public:
	Core2Dual(double s);
	virtual double sucManh();
};

int main()  {
	Core2Dual aChip(2);
	aChip.xepHang();
	cout<<endl;
	system("pause");
	return 0;
}

CPU::CPU(double s):tocDo(s){
}

double CPU::sucManh(){
	return tocDo;
}

void CPU::xepHang(){
	if(tocDo >3)
	{
		cout <<"Chip nay rat manh. ";
	}
	else
	{
		cout <<"Chip nay yeu. ";
	}
}

Core2Dual::Core2Dual(double s):CPU(s*2)  {  //Ở đây bạn phải dùng bộ khởi tạo của lớp CPU và truyền tham số là s*2. Bạn chỉ nhân đôi sức mạnh trong việc trả về giá trị của hàm sucManh() nên giá trị gốc của nó vẫn là 2.
}

double Core2Dual::sucManh(){
	tocDo;       //Bạn dùng constructor như trên thì không cần nhân 2 giá trị ở đây nữa.
}

Nếu muốn giữ nguyên constructor như trên, bạn phải dùng giá trị được trả lại trong hàm Core2Dual::sucManh() để so sánh (cần override hàm xepHang() như sau):

#include<iostream>

using namespace std;

class CPU{
protected:
	double tocDo;
public:
	CPU(double s);
	virtual double sucManh();
	virtual void xepHang();
};

class Core2Dual: public CPU{
public:
	Core2Dual(double s);
	double sucManh();
	void xepHang();
};

int main()  {
	Core2Dual aChip(2);
	aChip.xepHang();
	cout<<endl;
	system("pause");
	return 0;
}

CPU::CPU(double s):tocDo(s){
}

double CPU::sucManh(){
	return tocDo;
}

void CPU::xepHang(){
	if(tocDo >3)
	{
		cout <<"Chip nay rat manh. ";
	}
	else
	{
		cout <<"Chip nay yeu. ";
	}
}

Core2Dual::Core2Dual(double s):CPU(s){
}

double Core2Dual::sucManh(){
	return 2*tocDo;
}

void Core2Dual::xepHang() 	{
	
	if(sucManh() > 3)
		cout << "Chip manh" << endl;
	else
		cout << "Chip yeu" << endl;
}
Invidia viết 18:27 ngày 30/09/2018

Nếu chưa gọi hàm thì nó k hoạt động. Mình nghĩ là thay (tocDo>3) bằng (sucManh()>3) là dc rồi. Có gì sai thì sửa giúp mình nha

Nguyễn Minh Dũng viết 18:25 ngày 30/09/2018

@minh_vu_03 hoặc @Thanh_Nam có thể sửa lại cái tiêu đề cho nó cụ thể hơn được không?

Mong mọi người giúp em bài C++ về class này với ạ

Tiêu đề này không thể hiện được nội dung câu hỏi.

Bài liên quan
0