如何使用具有 4 个值 2 个变量的成员函数
How to use member functions with 4 values 2 variables?
我正在尝试我们成员函数允许输入 2 个有理(分数(数字(4 个值(,并且只在成员函数中使用 2 个变量。 分子和分母。 似乎无法完成这项工作。
使用下面的代码,我收到以下内容:当我输入 1/2 和 1/4
时并选择"2"以添加我接收分子 = 1 分母=1 r.numerator=1 r.分母=2
现在当我在输入函数中打印出变量时,我得到 1/2 和 1/4。 所以我很困惑为什么 1/2 被加载并传递给 Add 而不是 1/4。
我将非常感谢您的协助。
谢谢!
以下是处于未完成状态的代码,但它确实可以编译并运行。
#include <iostream>
using namespace std;
#include <conio.h>
class Rational
{
public:
Rational();
Rational(int numerator, int denominator);
Rational Input();
void Add(Rational r);
void Subtract(Rational r);
void Multiply(Rational r);
void Divide(Rational r);
void printRational();
void printRationalAsDouble();
Rational Reduction();
private:
int numerator, denominator;
};
Rational::Rational()
{
numerator = 1;
denominator = 1;
}
Rational Rational::Input()
{
Rational r;
cout<<"Enter two fractions. The denominator cannot be 0."<<endl;
cout<<"Enter first numerator: "<<endl; cin >> numerator;
cout<<"Enter first denominator: " <<endl; cin >> denominator;
if (denominator == 0)
{
cout<<"Please enter a valid denominator: "<<endl; cin >> denominator;
}
cout<<"Enter second numerator: "<<endl; cin >> r.numerator;
cout<<"Enter second denominator: "<<endl; cin >> r.denominator;
if (r.denominator == 0)
{
cout<<"Please enter a valid denominator: "<<endl; cin >> r.denominator;
}
cout<<endl;
cout << numerator << "/" << denominator << " " << r.numerator
<< "/" << r.denominator <<endl;
cout<<endl;
return(r);
}
void Rational::Add(Rational r)
{
Rational Result, x;
Result.numerator = (numerator * r.denominator) + (r.numerator * denominator);
Result.denominator = denominator * r.denominator;
cout << "numerator:" << numerator << endl;
cout << "denominator:" << denominator << endl;
cout << "r.nuerator:" << r.numerator << endl;
cout << "r.denominator:" << r.denominator << endl;
Result.Reduction();
Result.printRational();
Result.printRationalAsDouble();
}
void Rational::Subtract(Rational r)
{
Rational Result;
Result.numerator = (numerator * r.numerator) - (r.numerator * denominator);
Result.denominator = denominator * r.denominator;
Result.Reduction();
Result.printRational();
Result.printRationalAsDouble();
}
void Rational::Multiply(Rational r)
{
Rational Result;
Result.numerator = numerator * r.numerator;
Result.denominator = denominator * r.denominator;
Result.Reduction();
Result.printRational();
Result.printRationalAsDouble();
}
void Rational::Divide(Rational r)
{
Rational Result;
Result.numerator = numerator * r.denominator;
Result.denominator = denominator * r.numerator;
Result.Reduction();
Result.printRational();
Result.printRationalAsDouble();
}
void Rational::printRational()
{
cout << numerator << "/" << denominator << " Decimal:";
}
void Rational::printRationalAsDouble()
{
cout << (double) numerator / denominator << endl;
}
Rational Rational::Reduction()
{
Rational Result;
int largest;
largest = numerator > denominator ? numerator : denominator;
int gcd = 1;
for (int i = 2; i <= largest; i++)
if(numerator % i == 0 && denominator % i == 0)
gcd = i;
if(gcd != 0)
{
Result.numerator = (numerator /= gcd);
Result.denominator = (denominator /= gcd);
}
return(Result);
}
int main()
{
cout <<"*****************************************************************************"
<< endl;
cout <<"* This program will add two fractions, subract two fractions, *"
<< endl; //Intro message to the user
cout <<"* multiply two imputed fractions, or divide two fractions. *"
<< endl;
cout <<"*****************************************************************************"
<< endl;
int choice = 0;
Rational x, A, S, M, D;
while(choice != 6)
{
cout << "1. Enter two fractions." <<endl;
cout << "2. Add and display result." <<endl;
cout << "3. Subtract and display result." <<endl;
cout << "4. Multiply and display result." <<endl;
cout << "5. Divide and display result." <<endl;
cout << "6. Quit " <<endl;
cout <<"Selection choice: "<<endl;
cin >> choice;
if(choice == 1)
{
x.Input();
}
else if(choice == 2)
{
A.Add(x);
}
else if(choice == 3)
{
cout << "#3";
}
else if(choice == 4)
{
cout << "#4";
}
else if(choice == 5)
{
cout << "#5";
}
}
return(0);
}
当你写这个的时候
Rational Result;
指示编译器使用默认构造函数(即不带参数的构造函数(创建类型 Rational
的对象。您声明了该构造函数,但未提供其实现。
您可以添加以下代码来解决问题:
Rational::Rational() : numerator(0), denominator(1)
{
}
这将使Rational
数为零,分母为 1
。
或者,您可以更改Result
的声明以避免调用默认构造函数,如下所示:
Rational Result(
(numerator * r.denominator) + (r.numerator * denominator)
, denominator * r.denominator
);
您从未创建过默认构造函数。你有一个接受参数的构造函数,但你需要原型化和实现Rational::Rational()
。
像这样的东西是你想要的:
Rational::Rational() {
numerator=1
denominator=1
}
或者您认为合适的任何值,当它们在施工中没有定义时。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- C++预处理会生成变量成员、资源库和映射
- 局部堆栈变量成员的返回值优化
- Google Mock:在目标类的构造函数中实例化的模拟私有变量成员
- 使用指向结构变量成员的指针访问该结构的成员的地址
- 如果派生类仅包含自动变量成员,是否有必要具有虚拟驱动器
- 线程安全性和静态变量/成员功能
- "static const char array"可以在 C 语言上包含变量成员吗
- 仅用于内部目的的类的所有变量/成员的技术术语是什么
- 如何强制转换变量成员以将其作为函数的引用参数传递
- 类中未声明变量成员函数
- 在 main 中初始化类的 "static const" 类型变量成员的更好方法
- c++模板类静态const变量成员作为映射键给出未定义引用
- 在类中初始化结构变量成员会导致分割错误
- 在c++中建模变量成员类型
- 模板私有静态变量成员的未定义符号
- 不能访问公共静态变量成员
- 常量变量成员在C++有什么用?
- g++ 4.8.2坚持简单变量成员是数组