关于我的构造函数初始化的问题(乞丐问题)

question with the initialisation of my constructor (begginer question)

提问人:Elish 提问时间:4/16/2020 更新时间:4/16/2020 访问量:50

问:

对于我的任务,我必须做一个 Rational 类并添加运算符。 如果分母的输入是 1 或分子是 0,则输出只需要是分子。所以我想初始化我的复制构造函数,但我并没有真正成功(你可以看到我把它放在评论中),或者我需要更改我的打印功能?所以如果你能帮我.. 谢谢

//Rational.h
#ifndef Rational_h
#define Rational_h

#include <iostream>
using namespace std;

class Rational{
public:
    //default cstr
    Rational(int myNumerator=1, int myDenominator=1):numerator(myNumerator),denominator(myDenominator){}
    //copy cstr
    Rational (Rational const &num):numerator(num.getNumerator()),denominator(num.getDenominator()){
        /*if (denominator==1 or numerator==0) {
           // num=numerator;
        }*/
    }
    void setNumerator(int);
    void setDenominator(int);
    int getNumerator()const;
    int getDenominator()const;
    void print();
    void reduction(int,int);
    Rational operator/(Rational);

private:
    int numerator;
    int denominator;

};

#endif /* Rational_h */


//  Rational.cpp

void Rational::setNumerator(int myNumerator){
    numerator=myNumerator;
}
void Rational::setDenominator(int myDenominator){

    if (myDenominator==0){
        cout<<"ERROR"<<endl;
        denominator=1;
        }
    else
        denominator=myDenominator;
}

int Rational::getNumerator()const{
    return numerator;
}
void Rational::print(){
    cout<<numerator<<"/"<<denominator<<endl;
}

void Rational::reduction(int numerator,int denominator)
{
  for (int i = denominator * numerator; i > 1; i--)
     if ((denominator % i == 0) && (numerator % i == 0)) {
         denominator /= i;
         numerator /= i;
        }
}

Rational Rational::operator/(Rational num){
    Rational newNum;
    newNum.numerator=numerator*num.denominator;
    newNum.denominator=denominator*num.numerator;
    newNum.reduction(newNum.numerator, newNum.denominator);
    return newNum;
}
C++ operator-重载 复制构造函数

评论

0赞 Sam Varshavchik 4/16/2020
这是您需要做的:在一张纸上打印出上述内容。拿第二张纸,只剪掉让“”部分可见的部分。盖住它,所以这是你看到的唯一东西,不再。现在,拿第三张纸,写下一个非常详细的解释,说明这个声明的作用,以及它期望实现的目标。使您的解释尽可能详细,涵盖所有可能的含义和细微差别。现在,取出第二张纸,露出整个类和构造函数,重新阅读你写的内容,看看它是否有意义。num=numerator

答:

0赞 Jasper Kent 4/16/2020 #1

您根本不需要在这里编写自己的复制构造函数。自动生成的复制构造函数将执行您想要的操作。如果您什么都不做,它就会生成,或者更清楚地说,如果您明确要求它:

Rational (const  Rational& num)=default;

通常,只有当你的类包含指针时,你才需要编写自己的复制构造函数,而这个指针没有。

至于你关于分母和分子的逻辑,它不属于复制构造函数。您拥有的任何规则都应用于所有对象,而不仅仅是复制的对象,因此它应该位于其他构造函数中。一个原始对象具有正确的值,那么任何副本也必须是正确的。