Nik*_*ita 1 c++ math function output
我有以下代码:
#include <iostream>
using namespace std;
int a, b, sqr;
const int P = 3.14; //Later for circles...
string s1;
class MathsFunctions{
public:
virtual void square(int a, int b)=0;
};
class TriangleFunc: public MathsFunctions{
public:
void square(int a, int b){
sqr = (a * b)/2;
cout << "Square of triangle is: "<< sqr << endl;
}
};
class RectangleFunc: public MathsFunctions{
public:
void square(int a, int b){
sqr = a * b;
cout << "Square of rectangle is: "<< sqr << endl;
}
};
void getNumbers(){
cout << "Enter the first number: "<<endl;
cin >> a;
cout << "Enter the second number: "<< endl;
cin >> b;
}
void chooseTheFigure(){
cout << "Choose the figure (rectangle or triangle): "<< endl;
cin >> s1;
}
int main(){
chooseTheFigure();
getNumbers();
if(s1 == "rectangle" || "Rectangle"){
RectangleFunc r;
MathsFunctions * m = &r;
m -> square(a,b);
};
if (s1 == "triangle" || "Triangle"){
TriangleFunc t;
MathsFunctions *m = &t;
m -> square(a,b);
};
}
Run Code Online (Sandbox Code Playgroud)
我创建了一个计算矩形或三角形的方块的程序.main()中有一个条件,但最后程序显示两个结果.我怎样才能改善这一点?
程序输出的屏幕截图:

这不符合你的想法:
if(s1 == "rectangle" || "Rectangle"){
RectangleFunc r;
MathsFunctions * m = &r;
m -> square(a,b);
};
Run Code Online (Sandbox Code Playgroud)
上面的if-expression被评估为:
if((s1 == "rectangle") || ("Rectangle"))
// ^^^^^^^^^^^^^^^^^ or ^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
现在,第二部分"Rectangle"是字符串文字,它隐式转换为有效指针.并且除了nullptr整数之外的任何指针或像整数那样的任何指针评估为true- 始终.
你可能想写:
if((s1 == "rectangle") || (s1 == "Rectangle")){
RectangleFunc r;
MathsFunctions * m = &r;
m -> square(a,b);
};
Run Code Online (Sandbox Code Playgroud)
您的代码中还有一些其他细微差别,例如
vitual你的基类没有析构函数,
这个:
const int P = 3.14; //Later for circles...
Run Code Online (Sandbox Code Playgroud)
P 不会保持你期望的价值.