注册 登录
编程论坛 C++教室

求解这个main函数的倒数第一和倒数第三行

Sornets 发布于 2013-06-09 17:59, 886 次点击
程序代码:
int main()
{
    int num, i;
    Point p(1, -2), q(2, -1), t;
    t.show();
    std::cin>>num;
    Line line[num];
    for(i = 0; i < num; i++)
    {
        line[i].readLine();
        line[i].show();
    }
    Line l1(p, q), l2(p,t), l3(q,t), l4(l1);
    l1.show();
    l2.setLine(l1).show();
    l3.show();
    l4.setLine(t,q).show();
}

这是我们oj上的一个题,大概就是构造类,输入输出点和线的。
但是最后X.f.f这里不明白要怎么实现了。
是要在函数里构造类吗?
PS:下面是我写的代码,还没有通过编译
程序代码:
#include <iostream>

using namespace std;
class Point
{
    public:
    double x,y;
    Point (double xx = 0,double yy = 0)
    {
        x = xx;y = yy;
        cout<<"Point : ("<<x<<", "<<y<<") is created."<<endl;
    }
    void show()
    {
        cout<<"Point : ("<<x<<", "<<y<<')'<<endl;
    }

};
class Line
{
    //double x1,x2,y1,y2;
    Point a,b;
public:
    Line ()
    {
        cout<<"Line : ("<<a.x<<", "<<a.y<<") to ("<<b.x<<", "<<b.y<<") is created."<<endl;
    }
    Line (const Point &aa,const Point &bb)
    {
        Point aaa = aa,bbb = bb;
        a = aaa;b = bbb;
        cout<<"Line : ("<<a.x<<", "<<a.y<<") to ("<<b.x<<", "<<b.y<<") is created."<<endl;
    }
    Line (const Line &q)
    {
        a = q.a; b = q.b;
        cout<<"Line : ("<<a.x<<", "<<a.y<<") to ("<<b.x<<", "<<b.y<<") is created."<<endl;
    }
    void setLine(double x1, double y1, double x2, double y2)
    {
        a.x = x1; a.y = y1; b.x = x2 ;b.y = y2;
        cout<<"Line : ("<<a.x<<", "<<a.y<<") to ("<<b.x<<", "<<b.y<<")"<<endl;
    }
    void setLine(const Point &p, const Point &q)
    {
        a.x = p.x; b.x = q.x; a.y = p.y; b.y = q.y;
        cout<<"Line : ("<<a.x<<", "<<a.y<<") to ("<<b.x<<", "<<b.y<<")"<<endl;
    }
    void setLine(const Line &q)
    {
        a = q.a; b = q.b;
        cout<<"Line : ("<<a.x<<", "<<a.y<<") to ("<<b.x<<", "<<b.y<<")"<<endl;
    }
    void readLine()
    {
        double x,y,xx,yy;
        cin>>x>>y>>xx>>yy;
        a.x = x; a.y = y; b.x = xx; b.y = yy;
        cout<<"Line : ("<<a.x<<", "<<a.y<<") to ("<<b.x<<", "<<b.y<<")"<<endl;
    }
    void show()
    {
        cout<<"Line : ("<<a.x<<", "<<a.y<<") to ("<<b.x<<", "<<b.y<<")"<<endl;
    }
};
int main()
{
    int num, i;
    Point p(1, -2), q(2, -1), t;
    t.show();
    std::cin>>num;
    Line line[num];
    for(i = 0; i < num; i++)
    {
        line[i].readLine();
        line[i].show();
    }
    Line l1(p, q), l2(p,t), l3(q,t), l4(l1);
    l1.show();
    l2.setLine(l1).show();
    l3.show();
    l4.setLine(t,q).show();
}
7 回复
#2
Sornets2013-06-09 18:08
程序代码:
#include <iostream>

using namespace std;
class Point
{
public:
    double x,y;
    Point (double xx = 0,double yy = 0)
    {
        x = xx;
        y = yy;
        cout<<"Point : ("<<x<<", "<<y<<") is created."<<endl;
    }
    void show()
    {
        cout<<"Point : ("<<x<<", "<<y<<')'<<endl;
    }

};
class Line
{
    //double x1,x2,y1,y2;
    Point a,b;
public:
    Line ()
    {
        cout<<"Line : ("<<a.x<<", "<<a.y<<") to ("<<b.x<<", "<<b.y<<") is created."<<endl;
    }
    Line (const Point &aa,const Point &bb)
    {
        Point aaa = aa,bbb = bb;
        a = aaa;
        b = bbb;
        cout<<"Line : ("<<a.x<<", "<<a.y<<") to ("<<b.x<<", "<<b.y<<") is created."<<endl;
    }
    Line (const Line &q)
    {
        a = q.a;
        b = q.b;
        cout<<"Line : ("<<a.x<<", "<<a.y<<") to ("<<b.x<<", "<<b.y<<") is created."<<endl;
    }
    void setLine(double x1, double y1, double x2, double y2)
    {
        a.x = x1;
        a.y = y1;
        b.x = x2 ;
        b.y = y2;
        void show()
        {
            cout<<"Line : ("<<a.x<<", "<<a.y<<") to ("<<b.x<<", "<<b.y<<")"<<endl;
        }
    }
    void setLine(const Point &p, const Point &q)
    {
        a.x = p.x;
        b.x = q.x;
        a.y = p.y;
        b.y = q.y;
        void show()
        {
            cout<<"Line : ("<<a.x<<", "<<a.y<<") to ("<<b.x<<", "<<b.y<<")"<<endl;
        }
    }
    void setLine(const Line &q)
    {
        a = q.a;
        b = q.b;
        void show()
        {
            cout<<"Line : ("<<a.x<<", "<<a.y<<") to ("<<b.x<<", "<<b.y<<")"<<endl;
        }
    }
    void readLine()
    {
        double x,y,xx,yy;
        cin>>x>>y>>xx>>yy;
        a.x = x;
        a.y = y;
        b.x = xx;
        b.y = yy;
        cout<<"Line : ("<<a.x<<", "<<a.y<<") to ("<<b.x<<", "<<b.y<<")"<<endl;
    }

};
int main()
{
    int num, i;
    Point p(1, -2), q(2, -1), t;
    t.show();
    std::cin>>num;
    Line line[num];
    for(i = 0; i < num; i++)
    {
        line[i].readLine();
        line[i].show();
    }
    Line l1(p, q), l2(p,t), l3(q,t), l4(l1);
    l1.show();
    l2.setLine(l1).show();
    l3.show();
    l4.setLine(t,q).show();
}

为什么这样就通不过编译了?我在每个setline函数里都加了个show函数,把show函数注释掉就通过编译了,但是好像没有什么语法错误。。
#3
ww2806662013-06-09 22:08
void setLine(double x1, double y1, double x2, double y2)
    {
        a.x = x1;
        a.y = y1;
        b.x = x2 ;
        b.y = y2;
   
        void show()
        {
            cout<<"Line : ("<<a.x<<", "<<a.y<<") to ("<<b.x<<", "<<b.y<<")"<<endl;
        }
    }    //在函数里面定义函数?


l2.setLine(l1).show(); //你在哪学的还能连着调用 函数的?
#4
lzj125302013-06-09 22:12
你这是 成员函数重载
#5
Sornets2013-06-15 09:16
回复 3楼 ww280666
这不是我写的main函数啊,是题目给的,所以我也是很不明白是怎么用的。
#6
子楠2013-06-15 13:50
回复 楼主 Sornets
l1.show();
    l2.setLine(l1).show();
    l3.show();
    l4.setLine(t,q).show();
你这是直接一次性调用了两个函数,没有这样的语法。
一个类一次性只能调用一个函数。
l2.setLine(l1);
12.show();
就像这样
#7
代号2152013-06-15 16:10
l4.setLine(t,q).show();
这个是连锁调用你们不知道吗?    只要setLine函数返回一个对类类型的*this指针就行了
那么l4.setLine(t,q).show()表达式就可以解释为l4.setLine(t,q)然后再l4.show();  你把setline的返回类型定义成void 肯定不行
#8
Sornets2013-06-16 19:36
回复 7楼 代号215
能不能麻烦把代码写一下?我大概明白是怎么个意思了,但是要写出来还是不太可能,百度也没百度到。。
1