= =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)类为基类,重新定义矩形类。点为直角坐标点,矩形水平放置,由左下方的顶点和长宽定义派生类操作判断任一坐标点是在图形内,在图形的边缘上,还是在图形外。默认初始化图形退化为点。
展开
 我来答 举报
cqdjyy01234
2015-04-12 · TA获得超过1147个赞
知道小有建树答主
回答量:267
采纳率:50%
帮助的人:304万
展开全部

一句话回答:

因为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(参数,参数){}
百度网友fe679be4
2015-04-12
知道答主
回答量:21
采纳率:0%
帮助的人:4万
展开全部
仔细看看,房贷款纠纷
抢首赞 已赞过 已踩过<
你对这个回答的评价是?
评论 举报 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式