标题:以下代码是否符合题意
只看楼主
hffjhhh
Rank: 1
等 级:新手上路
帖 子:127
专家分:7
注 册:2019-4-10
结帖率:90.38%
已结贴  问题点数:20 回复次数:11 
以下代码是否符合题意
下面是一个类声明,
程序代码:
class Move{
    private:
        double x;
        double y;
    public:
        Move(double a=0,double b=0);//set x,y to a,b
        showmove() const;           //shows current x,y values
        Move add(const Move &m)const;
        //this function adds x of m to x of invoking object to get new x,
        //adds y of m to y of invoking object to get new y,creates a new move object initialized to new x,y values and returns it.
        reset(double a=0,double b=0);   //resets x,y to a,b
};

请提供成员函数的定义和测试这个类的程序。

以上就是题目。
代码如下:
程序代码:
#include<iostream>
using namespace std;
class Move{
    private:
        double x;
        double y;
    public:
        Move(double a=0,double b=0);
        showmove() const;        
        Move add(const Move &m)const;

        reset(double a=0,double b=0);   
};
Move::Move(double a,double b){
    x=a;
    y=b;
}
Move::showmove()const{
    cout<<"x值:"<<x<<endl;
    cout<<"y值:"<<y<<endl; 
}
Move Move::add(const Move &m)const{
    Move invoking;
    invoking.x=m.x;
    invoking.y=m.y;
    Move aaa(x,y);
    return (x,y);
}
Move::reset(double a,double b){
    x=a;
    y=b;
}
int main(){    
    Move bbb;
    bbb.showmove();
    double x,y;
    cout<<"输入x值:";
    cin>>x;
    cout<<"输入y值:";
    cin>>y;
    Move ccc(x,y);
    ccc.add(ccc);
    ccc.reset(x,y);
    ccc.showmove();
    return 0;
}
搜索更多相关主题的帖子: 代码 const Move cout double 
2021-02-04 15:56
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
    Move aaa(x,y);
    return (x,y);
这是什么?
2021-02-04 16:52
hffjhhh
Rank: 1
等 级:新手上路
帖 子:127
专家分:7
注 册:2019-4-10
得分:0 
以下是引用rjsp在2021-2-4 16:52:49的发言:

这是什么?

这是个错误的写法,原本要返回aaa这个对象。是不是要改为这样:
    Move aaa(x,y);
    return aaa;
2021-02-04 19:31
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
回复 3楼 hffjhhh
我觉得应该是将
Move Move::add(const Move &m)const{
    Move invoking;
    invoking.x=m.x;
    invoking.y=m.y;
    Move aaa(x,y);
    return (x,y);
}
改为
Move Move::add(const Move& m) const
{
    return Move(x+m.x, y+m.y);
}
2021-02-04 20:38
hffjhhh
Rank: 1
等 级:新手上路
帖 子:127
专家分:7
注 册:2019-4-10
得分:0 
以下是引用rjsp在2021-2-4 20:38:21的发言:

改为
Move Move::add(const Move& m) const
{
    return Move(x+m.x, y+m.y);
}

下面这行
return Move(x+m.x, y+m.y);

当中的Move是个带2个参数进行初始化的对象吗?这个对象来自于哪里?


另外如果改为这样,那是不是就少了题目中要求的invoking对象?
2021-02-04 21:14
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
当中的Move是个带2个参数进行初始化的对象吗?
是,很显然

这个对象来自于哪里?
听不懂

另外如果改为这样,那是不是就少了题目中要求的invoking对象?
我英文够差了,你比我还差。
“invoking object”是“调用对象”,比如你代码中的“ccc.add(……)”中“ccc”就是“invoking object”。
因此,“adds x of m to x of invoking object to get new x”翻译成汉语是“将 m.x 与 this->x 相加得到新的 x”
2021-02-05 08:55
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
假如撇开原题,按照正常的逻辑来写,那应该是
程序代码:
#include <iostream>

class Coordinate
{
public:
    Coordinate() noexcept = default;
    Coordinate( double x, double y ) noexcept;
    Coordinate( const Coordinate& rhs ) noexcept = default;
    Coordinate& operator=( const Coordinate& rhs ) noexcept = default;
    Coordinate operator+( const Coordinate& rhs ) const noexcept;
    void reset( double x, double y ) noexcept;
    friend std::ostream& operator<<( std::ostream&, const Coordinate& );

private:
    double x_=0, y_=0;
};

Coordinate::Coordinate( double x, double y ) noexcept : x_(x), y_(y)
{
}

Coordinate Coordinate::operator+( const Coordinate& rhs ) const noexcept
{
    return Coordinate(x_+rhs.x_, y_+rhs.y_);
}

void Coordinate::reset( double x, double y ) noexcept
{
    x_ = x;
    y_ = y;
}

std::ostream& operator<<( std::ostream& os, const Coordinate& rhs )
{
    return os << rhs.x_ << ' ' << rhs.y_;
}

using namespace std;

int main( void )
{
    // 测试缺省构造函数,应当输出“0 0”
    cout << Coordinate() << endl;

    // 测试构造函数,应当输出“1 2”
    cout << Coordinate(1,2) << endl;

    // 测试原题中的 Move::add,应当输出“4 6”
    cout << Coordinate(1,2)+Coordinate(3,4) << endl;

    // 测试 reset,应当输出“7 8”和“9 10”
    Coordinate a(7,8);
    cout << a << endl;
    a.reset(9,10);
    cout << a << endl;
}


[此贴子已经被作者于2021-2-5 09:28编辑过]

2021-02-05 09:24
裂开的闭眼猪
Rank: 2
来 自:Edge
等 级:论坛游民
帖 子:12
专家分:40
注 册:2021-2-2
得分:10 
Move Move::add(const Move &m)const{
    Move invoking;
    invoking.x=m.x;
    invoking.y=m.y;
    Move aaa(x,y);
    return (x,y);
}

我认为成员函数add()应该是这样:
Move Move::add(const Move &m) const{
    Move temp(x+m.x,y+m.y);
    return temp;
}



[此贴子已经被作者于2021-2-5 13:57编辑过]

2021-02-05 10:42
hffjhhh
Rank: 1
等 级:新手上路
帖 子:127
专家分:7
注 册:2019-4-10
得分:0 
以下是引用rjsp在2021-2-4 20:38:21的发言:

改为
Move Move::add(const Move& m) const
{
    return Move(x+m.x, y+m.y);
}

以下这行
return Move(x+m.x, y+m.y);
当中的Move对象是来自以下这行this指针函数所创建的对象是吗?
Move Move::add(const Move& m) const
即由红色字体部分所创建的对象,是这样吗?

另外8楼的写法是否也符合题意?

[此贴子已经被作者于2021-2-6 19:15编辑过]

2021-02-06 19:02
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
回复 9楼 hffjhhh
听不懂
2021-02-07 08:23



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-504817-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.451559 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved