qq_45735316 2020-03-27 10:29 采纳率: 94.1%
浏览 156
已采纳

(1,0)是怎么来的?我只调用了一次Point类的无参数的构造函数啊

图片说明图片说明

#include <iostream>
#include <math.h>
using namespace std;
/*与7.3相比较 为什么Point类的无参数构造函数都无法调用?
应该在CRect的构造函数里面写些什么?
有没有一种可能能在CRect的构造函数中调用CRect的成员函数?*/ 

class Point{           //定义一个点类Point 
    public: 
       /* Point()
        {
            x=0;
            y=0;
            cout<<"calling the constructor"<<endl; 
            cout<<"(x,y)为"<<"("<<x<<","<<y<")"; 
        }*/
        //简化上述代码 
        Point()
        {
            Point(0,0);
            cout<<"calling the constructor"<<endl; 
            cout<<"(x,y)为"<<"("<<x<<","<<y<<")"<<endl; 
         } 
        Point(int xx,int yy):x(xx),y(yy)      //Point类的构造函数 
        {
        /*  x=xx;
            y=yy;合成到构造函数的声明里面*/ 
            cout<<"calling the constructor"<<endl; 
            cout<<"(x,y)为"<<"("<<x<<","<<y<<")"<<endl; 
        }
        int getX(){
            return x;
        }
        int getY(){
            return y;
        }
    private:
        int x,y;
};
class CRect{           //定义一个CRect类 
    public:
        CRect();                                  //无参数的构造函数
        CRect(Point p,Point p1);                              //有参数的构造函数 
        int RectHeight();       //得到矩形的高
        int RectWidth();        //得到矩形的宽
        int RectArea();         //得到矩形的面积
    private:
        Point p,p1;  
};
CRect::CRect(Point pp,Point pp1):p(pp),p1(pp1)
{
    cout<<"calling the constructor"<<endl; 

}
int CRect::RectHeight()
{
    int H=0;
    H=abs(p.getY()-p1.getY());
    return H;
}
int CRect::RectWidth()
{
    int W=0;
    W=abs(p.getX()-p1.getX());
    return W;
}
int CRect::RectArea()
{
    int A=0;
    A=abs((p.getY()-p1.getY())*(p.getX()-p1.getX()));
    return A;
}
int main(int argc, char** argv) {
    int x,y;
    int x1,y1;
    cin>>x>>y;
    cin>>x1>>y1;
    Point a;            //?????? 
    /*因为
Point()
和
Point(int x=0,int y=0)
两个混淆了。
编译器遇到
Point p不知道是调用p()好,还是p(x=0,y=0)好。*/
    Point p(x,y);       //调用Point的构造函数
    Point p1(x1,y1);

    CRect c(p,p1);      //调用CRect的构造函数 
    int H=0,W=0,A=0;
    H=c.RectHeight();
    cout<<"矩形的高为"<<H<<endl; 
    W=c.RectWidth();
    cout<<"矩形的宽为"<<W<<endl;
    A=c.RectArea();
    cout<<"矩形的面积为"<<A<<endl;
    return 0;
}
  • 写回答

1条回答 默认 最新

  • threenewbee 2020-03-27 10:36
    关注

    图片说明
    图片说明

    此时x y还没有完成初始化

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 10月22日

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)