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()'
这是什么原因?
Triangle(Point p1,Point p2,Point p3): Point(oo,xx), p1(p1),p2(p2),p3(p3){}
基类没有无参构造函数,需要指定使用基类的哪个构造函数。
话说 三角形类从点类派生, 着实有些个蛋疼啊。。。楼主需要注意LSP原则
楼上说的正确,而且基类中的有参构造函数,需要在派生类里进行初始化的。楼主注意了。
如果父类中有有参构造函数时,子类中要对它进行初始化,并且需要在初始化列表中进行初始化
如下:
Triangle(int x,int y,Point p1,Point p2,Point p3):Point(x,y),p1(p1),p2(p2),p3(p3){}
创建子类对象的时候,如果子类构造函数没有显式调用父类的构造函数并且父类仅定义了有参构造函数时,则会出错。
需要给父类定义一个无参构造函数,或者与“Todd_Pointer”说的方法一样。
C++子类调用父类构造函数说明:http://www.360doc.com/content/13/0124/17/1200324_262174891.shtml