为什么我的病情不起作用?

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()中有一个条件,但最后程序显示两个结果.我怎样才能改善这一点?

程序输出的屏幕截图:

程序输出的屏幕截图

Whi*_*TiM 5

这不符合你的想法:

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)

----------------------------------------

您的代码中还有一些其他细微差别,例如