C++ 无法从数组quadraticExpression检索数据值
所以,在工作类中,我们必须为二次表达式编写一个头类。我已经完成了头文件的大部分工作,但是,当我继续使用给定的.cpp文件运行以测试头文件时,它似乎没有读取cpp文件中数组中给定的值。当我调试时,它只是为这些值放入垃圾值。对我来说,我认为这是有道理的,看不出有什么问题。除非我遗漏了什么 我构造了以下头文件C++ 无法从数组quadraticExpression检索数据值,c++,header,C++,Header,所以,在工作类中,我们必须为二次表达式编写一个头类。我已经完成了头文件的大部分工作,但是,当我继续使用给定的.cpp文件运行以测试头文件时,它似乎没有读取cpp文件中数组中给定的值。当我调试时,它只是为这些值放入垃圾值。对我来说,我认为这是有道理的,看不出有什么问题。除非我遗漏了什么 我构造了以下头文件 #pragma once #include <cmath> enum roots { NO_ROOTS = 0, ONE_ROOT = 1, TWO_ROO
#pragma once
#include <cmath>
enum roots {
NO_ROOTS = 0,
ONE_ROOT = 1,
TWO_ROOTS = 2,
INFINITE_ROOTS = 3
};
class quadraticExpression
{
private:
double a, b, c;
public:
double evaluate(double x) const;
int getNumberOfRoots() const;
double getFirstRoot() const;
double getSecondRoot() const;
double getACoefficient() const;
double getBCoefficient() const;
double getCCoefficient() const;
quadraticExpression();
quadraticExpression(double a,
double b,
double c);
};
quadraticExpression::quadraticExpression()
{
a = 0;
b = 0;
c = 0;
}
inline quadraticExpression::quadraticExpression(double a, double b, double
c)
{
a = a;
b = b;
c = c;
}
;
double quadraticExpression::evaluate(double x) const
{
double y;
y = (a*(x * x)) + (b * x) + c;
return y;
}
int quadraticExpression::getNumberOfRoots() const
{
//return value from enum
double eins;
double zwei;
eins = getFirstRoot();
zwei = getSecondRoot();
if (eins == 0 && zwei == 0)
{
return TWO_ROOTS;
}
else if (eins == 0 || zwei == 0)
{
return ONE_ROOT;
}
else if (eins != 0 && zwei != 0)
{
return NO_ROOTS;
}
}
double quadraticExpression::getFirstRoot() const
{
//return one x value where y is 0
double root1 = (b * b);
double root2 = (4 * a*c);
double solutionOne;
double zUno;
zUno = (abs(b) + sqrt(root1 - root2)) / (2 * a);
solutionOne = (a*(zUno * zUno)) + (b * zUno) + c;
return solutionOne;
}
double quadraticExpression::getSecondRoot() const
{
//return another x value where y is 0
double root1 = (b * b);
double root2 = (4 * a*c);
double solutionTwo;
double zDos;
zDos = (abs(b) - sqrt(root1 - root2)) / (2 * a);
solutionTwo = (a*(zDos *zDos)) + (b *zDos) + c;
return solutionTwo;
}
double quadraticExpression::getACoefficient() const
{
return a;
}
double quadraticExpression::getBCoefficient() const
{
return b;
}
double quadraticExpression::getCCoefficient() const
{
return c;
}
#pragma一次
#包括
枚举根{
无_根=0,
一个_根=1,
两个_根=2,
无限根=3
};
类平方表达式
{
私人:
双a、b、c;
公众:
双评价(双x)常数;
int getNumberOfRoots()常量;
双getFirstRoot()常量;
双getSecondRoot()常量;
双getACoefficient()常量;
双getBCoefficient()常量;
双getCCoefficient()常量;
平方表达式();
平方表达式(双a,
双b,
双c);
};
quadraticExpression::quadraticExpression()
{
a=0;
b=0;
c=0;
}
内联quadraicexpression::quadraicexpression(双a、双b、双
(c)
{
a=a;
b=b;
c=c;
}
;
双平方表达式::求值(双x)常量
{
双y;
y=(a*(x*x))+(b*x)+c;
返回y;
}
int quadraticExpression::getNumberOfRoots()常量
{
//从枚举返回值
双EIN;
双中卫;
eins=getFirstRoot();
zwei=getSecondRoot();
如果(eins==0&&zwei==0)
{
返回两个_根;
}
else if(eins==0 | | zwei==0)
{
返回一个_根;
}
else if(eins!=0&&zwei!=0)
{
不返回根;
}
}
双平方表达式::getFirstRoot()常量
{
//返回一个x值,其中y为0
双根1=(b*b);
双根2=(4*a*c);
双溶剂酮;
双祖诺;
zUno=(abs(b)+sqrt(root1-root2))/(2*a);
溶质酮=(a*(zUno*zUno))+(b*zUno)+c;
回流液;
}
双平方表达式::getSecondRoot()常量
{
//返回另一个x值,其中y为0
双根1=(b*b);
双根2=(4*a*c);
双解二;
双zDos;
zDos=(abs(b)-sqrt(root1-root2))/(2*a);
解二=(a*(zDos*zDos))+(b*zDos)+c;
返回解二;
}
双平方表达式::getACoefficient()常量
{
返回a;
}
双平方表达式::getBCoefficient()常量
{
返回b;
}
双平方表达式::getCCoefficient()常量
{
返回c;
}
这是.cpp tester文件
#include <iostream>
#include "QuadraticExpression.h"
using namespace std;
void evaluateExpression(const quadraticExpression &);
int main()
{
quadraticExpression q[6] = { quadraticExpression(2.1, 3, -7),
quadraticExpression(1.4, 3.9, +7),
quadraticExpression(-.75, 0, 0),
quadraticExpression(0, .3, -7),
quadraticExpression(0, 0, 4),
quadraticExpression() };
for (int i = 0; i<6; i++)
evaluateExpression(q[i]);
return EXIT_SUCCESS;
}
void evaluateExpression(const quadraticExpression &q)
{
int errorsHandled = 0;
cout << q.getACoefficient() << " A " << endl;
cout << q.getBCoefficient() << " B " << endl;
cout << q.getCCoefficient() << " C " << endl;
cout << "f(-5) = " << q.evaluate(-5) << endl;
cout << "f(0) = " << q.evaluate(0) << endl;
cout << "f(5) = " << q.evaluate(5) << endl;
if (q.getNumberOfRoots() == INFINITE_ROOTS)
cout << "The Expression has Infinite Roots" << endl;
else if (q.getNumberOfRoots() == ONE_ROOT)
cout << "The Expression has One Root at x = " << q.getFirstRoot() <<
endl;
else if (q.getNumberOfRoots() == TWO_ROOTS)
{
cout << "The Expression has First Root at x = " << q.getFirstRoot() <<
endl;
cout << "The Expression has Second Root at x = " << q.getSecondRoot() <<
endl;
}
else
cout << "The Expression has No Roots" << endl;
try {
q.getFirstRoot();
}
catch (domain_error e) {
errorsHandled++;
}
try {
q.getSecondRoot();
}
catch (domain_error e) {
errorsHandled++;
}
cout << "Errors Handled: " << errorsHandled << endl;
cout << endl;
cout << endl;
}
#包括
#包括“QuadraticExpression.h”
使用名称空间std;
void evaluateExpression(const quadraticExpression&);
int main()
{
二次表达式q[6]={二次表达式(2.1,3,-7),
平方表达式(1.4,3.9,+7),
平方表达式(.75,0,0),
平方表达式(0.3,-7),
平方表达式(0,0,4),
求积表达式()};
对于(inti=0;i这将不会像您所希望的那样工作
inline quadraticExpression::quadraticExpression(double a, double b, double c)
{
a = a;
b = b;
c = c;
}
您只是将参数变量分配给它们自己,而不是分配给类的成员变量。函数中声明的变量优先于具有相同名称的成员变量
您应该为参数指定与成员变量不同的名称,或者像this->a=a;
那样赋值
但是,如果您只是从参数初始化成员变量,则根本不需要执行赋值,首选初始值设定项列表(请参阅):
类似地,不带参数的构造函数应使用初始值设定项列表:
quadraticExpression::quadraticExpression() : a(0), b(0), c(0)
{}
欢迎来到Stack Overflow。请看一下我们的介绍,并特别注意上的页面。您发布的大多数代码与问题无关,将其精简为基本代码不仅使我们的工作更容易,而且让您更容易看到错误。这是一项重要的编码技能。inquadraticExpression::quadraticEx压力(双a、双b、双c)
你有a=a;
…这是行不通的!虽然你可以使用this->a=a;
但最好以不同的方式命名成员变量和参数。@drescherjm我不确定我应该在这里说哪个Ayn-Rand笑话。看,你指出的,因为它不能按预期工作,根据编译器的说法,解决了一个未解决的外部错误我正在使用visual studio 2015,它必须被添加到其中,但我不清楚为什么。我认为这是有意义的,因为我需要一个构造函数,它提供了允许用户输入的变量。但我想我理解你所说的分配成员变量而不是参数变量的意思。这解决了问题在编译器拾取垃圾数据时,我在成员函数名中输入了错误,这可能就是问题所在。这种语法已经存在很长时间了,VS2015应该支持它。
quadraticExpression::quadraticExpression() : a(0), b(0), c(0)
{}