01/10/2018, 12:29

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;
}
HK boy viết 14:35 ngày 01/10/2018

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?

rogp10 viết 14:34 ngày 01/10/2018

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

Thành Long viết 14:35 ngày 01/10/2018

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.

Thành Long viết 14:42 ngày 01/10/2018

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

Dark.Hades viết 14:30 ngày 01/10/2018

Thêm

int TinhCV();

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

*grab popcorn* viết 14:29 ngày 01/10/2018

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

Bài liên quan
0