提问人:Elish 提问时间:4/16/2020 更新时间:4/16/2020 访问量:50
关于我的构造函数初始化的问题(乞丐问题)
question with the initialisation of my constructor (begginer question)
问:
对于我的任务,我必须做一个 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;
}
答:
0赞
Jasper Kent
4/16/2020
#1
您根本不需要在这里编写自己的复制构造函数。自动生成的复制构造函数将执行您想要的操作。如果您什么都不做,它就会生成,或者更清楚地说,如果您明确要求它:
Rational (const Rational& num)=default;
通常,只有当你的类包含指针时,你才需要编写自己的复制构造函数,而这个指针没有。
至于你关于分母和分子的逻辑,它不属于复制构造函数。您拥有的任何规则都应用于所有对象,而不仅仅是复制的对象,因此它应该位于其他构造函数中。一个原始对象具有正确的值,那么任何副本也必须是正确的。
下一个:运算符重载影响我的复制构造函数
评论
num=numerator