Hỏi về kế thừa trong C++

Cho em hỏi tại sao không xuất ra chu vi của TuGiac mà xuất ra của TamGiac vậy ạ.

#include <iostream>
using namespace std;

class TamGiac {
private:
	int a, b, c;
public:
	TamGiac();
	TamGiac(int x, int y, int z);
	TamGiac(const TamGiac&);
	int TinhCV();
};

TamGiac::TamGiac() {}
TamGiac::TamGiac(int x, int y, int z) :a(x), b(y), c(z) {}
TamGiac::TamGiac(const TamGiac &tg) {
	this->a = tg.a;
	this->b = tg.b;
	this->c = tg.c;
}
int TamGiac::TinhCV() {
	return a + b + c;
}

class TuGiac :public TamGiac {
private:
	int d;
public:
	TuGiac();
	TuGiac(int x, int y, int z, int k);
	TuGiac(const TuGiac&);
	int TinhCV();
};

TuGiac::TuGiac() :TamGiac() {}
TuGiac::TuGiac(int x, int y, int z, int k) : TamGiac(x, y, z) {
	d = k;
}
TuGiac::TuGiac(const TuGiac &tg) : TamGiac((TamGiac&)tg) {
	this->d = tg.d;
}
int TuGiac::TinhCV() {
	int k = TamGiac::TinhCV();
	return k + d;
    }
}

int main() {
	TuGiac a(2, 3, 4, 5);
	a.Xuat();
	system("pause");
	return 0;
}

Về hình học, lớp Tứ giác không phải là kế thừa từ lớp Tam giác.

Code của bạn bị lỗi biên dịch. Thế là thế nào?

Muốn biểu diễn quan hệ này (n-giác) trong C++ thì template e là tốt hơn đấy.

1 Like

sorry em thiếu.

#include <iostream>
using namespace std;

class TamGiac {
private:
	int a, b, c;
public:
	TamGiac();
	TamGiac(int x, int y, int z);
	TamGiac(const TamGiac&);
	int TinhCV();
	void Xuat();
};

TamGiac::TamGiac() {}
TamGiac::TamGiac(int x, int y, int z) :a(x), b(y), c(z) {}
TamGiac::TamGiac(const TamGiac &tg) {
	this->a = tg.a;
	this->b = tg.b;
	this->c = tg.c;
}
int TamGiac::TinhCV() {
	return a + b + c;
}
void TamGiac::Xuat(){
	cout << "Chu vi la: " << TinhCV() << endl;	
}

class TuGiac :public TamGiac {
private:
	int d;
public:
	TuGiac();
	TuGiac(int x, int y, int z, int k);
	TuGiac(const TuGiac&);
	int TinhCV();
};

TuGiac::TuGiac() :TamGiac() {}

TuGiac::TuGiac(int x, int y, int z, int k) : TamGiac(x, y, z) {
	d = k;
}

TuGiac::TuGiac(const TuGiac &tg) : TamGiac((TamGiac&)tg) {
	this->d = tg.d;
}

int TuGiac::TinhCV() {
	int k = TamGiac::TinhCV();
	return k + d;
}

int main() {
	TuGiac a(2, 3, 4, 5);
	a.Xuat();
	system("pause");
	return 0;
}

Em muốn hỏi là tại sao trong hàm main, a.Xuat() lấy TinhCV() của TamGiac
mà không phải lấy TinhCV() của TuGiac. Trong khi a là của TuGiac. Cảm ơn anh nhiều.

Vì đây là bài tập về kế thừa và đa hình. Mong anh giúp

Thêm

virtual int TinhCV();

Vào cả hai hàm

Nếu C++ 11 thì cuối hàm kế thừa cho thêm
override

2 Likes

A post was merged into an existing topic: Topic chứa các reply được cho là off-topic - version 2

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