= =C++,为什么我的派生类的构造函数编译时会这样
#include<iostream>usingnamespacestd;classpoint{doublex,y;public:point(doublexx,double...
#include<iostream>
using namespace std;
class point{
double x,y;
public:
point(double xx,double yy){
x=xx;
y=yy;}
double getx(){return x;}
double gety(){return y;}
};
class squ:public point{
double chang,kuan,z,zz,xx,yy;
point p;
public:
squ(double x,double y):point(x,y){ //error C2512: 'point' : no appropriate default constructor available就是这个地方,纠正这个地方就行//
z=0;
zz=0;}
void get(double x,double y){
chang=x;
kuan=y;
}
double getxx(){return p.getx();}
double getyy(){return p.gety();}
void judge(){if(xx>getxx&&xx<getxx+chang) z=1;
if(xx==getxx||xx==getxx+chang) z=2;
if(yy>getyy&&yy<getyy+kuan) zz=1;
if(yy==getyy&&yy==getyy+kuan) zz=2;
if(z==1&&zz==1) cout<<"该坐标点在图形内."<<endl;
else if(z==2&&zz!=0||z!=0&&zz==2) cout<<"该坐标点在图形上."<<endl;
else cout<<"该坐标点在图形外."<<endl;
}
};
void main(){
squ a(0,1,4,2);
a.get(4,4);
}
请改正。 连续三次错点采纳我也是醉了= =
以点(point)类为基类,重新定义矩形类。点为直角坐标点,矩形水平放置,由左下方的顶点和长宽定义派生类操作判断任一坐标点是在图形内,在图形的边缘上,还是在图形外。默认初始化图形退化为点。 展开
using namespace std;
class point{
double x,y;
public:
point(double xx,double yy){
x=xx;
y=yy;}
double getx(){return x;}
double gety(){return y;}
};
class squ:public point{
double chang,kuan,z,zz,xx,yy;
point p;
public:
squ(double x,double y):point(x,y){ //error C2512: 'point' : no appropriate default constructor available就是这个地方,纠正这个地方就行//
z=0;
zz=0;}
void get(double x,double y){
chang=x;
kuan=y;
}
double getxx(){return p.getx();}
double getyy(){return p.gety();}
void judge(){if(xx>getxx&&xx<getxx+chang) z=1;
if(xx==getxx||xx==getxx+chang) z=2;
if(yy>getyy&&yy<getyy+kuan) zz=1;
if(yy==getyy&&yy==getyy+kuan) zz=2;
if(z==1&&zz==1) cout<<"该坐标点在图形内."<<endl;
else if(z==2&&zz!=0||z!=0&&zz==2) cout<<"该坐标点在图形上."<<endl;
else cout<<"该坐标点在图形外."<<endl;
}
};
void main(){
squ a(0,1,4,2);
a.get(4,4);
}
请改正。 连续三次错点采纳我也是醉了= =
以点(point)类为基类,重新定义矩形类。点为直角坐标点,矩形水平放置,由左下方的顶点和长宽定义派生类操作判断任一坐标点是在图形内,在图形的边缘上,还是在图形外。默认初始化图形退化为点。 展开
展开全部
一句话回答:
因为squ包含一个point成员p,你没有在列表中进行初始化,所以会调用point的默认构造函数(不存在)。
补充:
代码还有其它问题且逻辑不是很清晰。从代码来看,你的需求是定义一个点类和矩形类,并判断一个点与矩形的相对位置。下面的代码供你参考:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | #include <iostream> #include <stdexcept> // 2维点 class point { double mx, my; public : point( double const x, double const y) : mx(x), my(y) {} double get_x() const { return mx; } double get_y() const { return my; } }; // 矩形 // 假设坐标轴为: // +--------------> x // | // | North // | West * East // | South // V // y class square { // 不要从point继承,因为矩形不能看作点 point m_NorthWest, m_SouthEast; // 左上角、右下角 public : square( double const x0, double const y0, double const x1, double const y1) : m_NorthWest(x0, y0), m_SouthEast(x1, y1) { // 检查参数是否合理 if (x0 > x1) throw std::invalid_argument( "右下角的横坐标小于左上角的横坐标" ); if (y0 > y1) throw std::invalid_argument( "右下角的纵坐标小于左上角的纵坐标" ); } // 获取长、宽 point get_size() const { point result = { m_SouthEast.get_x() - m_NorthWest.get_x(), m_SouthEast.get_y() - m_NorthWest.get_y() }; return result; } enum judge_result { IN, OUT, ON }; // 判定p相对于矩形的位置 judge_result judge(point const p) const { if (p.get_x() < m_NorthWest.get_x() || p.get_x() > m_SouthEast.get_x() || p.get_y() < m_NorthWest.get_y() || p.get_y() > m_SouthEast.get_y()) { return OUT; } if (p.get_x() > m_NorthWest.get_x() && p.get_x() < m_SouthEast.get_x() && p.get_y() > m_NorthWest.get_y() && p.get_y() < m_SouthEast.get_y()) { return IN; } return ON; } }; int main() { try { square const a(0, 1, 4, 2); point const size = a.get_size(); std::cout << "长 = " << size.get_x() << ", 宽 = " << size.get_y() << "\n" ; switch (a.judge(point(4, 4))) { case square::IN: std::cout << "该坐标点在图形内.\n" ; break ; case square::OUT: std::cout << "该坐标点在图形外.\n" ; break ; case square::ON: std::cout << "该坐标点在图形上.\n" ; break ; default : throw std::logic_error( "不可能!啊!啊!啊!" ); } } catch (std::exception const &err) { std::cerr << err.what() << "\n" ; } return 0; } |
建议:
1、要习惯加const,防止不小心对变量进行修改。
2、利用异常进行错误处理。
追问
我将那一行的point 改为p了,为什么还是显示错误,按书上对派生函数初始化就是这样的。 我想知道那一行怎么改才正确
追答
1 | squ( double x, double y):point(x,y), p(参数,参数){} |
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询