2 yongyuan3073 yongyuan3073 于 2013.12.09 19:05 提问

基类的对象作为派生类函数的形参传递。。大家帮忙看看

class Point{
public:
Point(int xx,int yy){
x = xx;
y = yy;
}

private:
int x,y;
};

class Triangle:public Point{
public:
Triangle(Point p1,Point p2,Point p3):p1(p1),p2(p2),p3(p3){}
}
private:
Point p1;
Point p2;
Point p3;
};
上面两个类的定义在两个头文件中,在main函数中包括
#include
#include

#include "Point.h"
#include "triangle.h"
using namespace std;

int main(){
Point point(7, 11);
Point p1(1,1), p2(5,1), p3(1,4);
Triangle triangle(p1, p2, p3);
system("pause");
return 0;
}
错误是:triangle.h [Error] no matching function for call to 'Point::Point()'
这是什么原因?

3个回答

u012908616
u012908616   2013.12.09 21:16
已采纳

Triangle(Point p1,Point p2,Point p3): Point(oo,xx), p1(p1),p2(p2),p3(p3){}
基类没有无参构造函数,需要指定使用基类的哪个构造函数。

话说 三角形类从点类派生, 着实有些个蛋疼啊。。。楼主需要注意LSP原则

qiaolin19890323
qiaolin19890323   2013.12.10 15:40

楼上说的正确,而且基类中的有参构造函数,需要在派生类里进行初始化的。楼主注意了。
如果父类中有有参构造函数时,子类中要对它进行初始化,并且需要在初始化列表中进行初始化
如下:
Triangle(int x,int y,Point p1,Point p2,Point p3):Point(x,y),p1(p1),p2(p2),p3(p3){}

yOung_One
yOung_One   2013.12.11 18:01

创建子类对象的时候,如果子类构造函数没有显式调用父类的构造函数并且父类仅定义了有参构造函数时,则会出错。
需要给父类定义一个无参构造函数,或者与“Todd_Pointer”说的方法一样。
C++子类调用父类构造函数说明:http://www.360doc.com/content/13/0124/17/1200324_262174891.shtml

Csdn user default icon
上传中...
上传图片
插入图片