不是从左到右输出吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不是从左到右输出吗?相关的知识,希望对你有一定的参考价值。
因此,我的教授给出了一个作业,他给出了main()函数。我们将为其提供类以产生类似的输出。我尝试了很多代码,但找不到答案。当教授给我他的答案时,我似乎听不懂。
这是问题,
创建一个程序来显示三个形状的参数,即圆形,三角形和正方形。该类应能够请求用户为每种形状插入相关信息,即长度和直径,这些信息将存储在该类的私有成员中。每个形状的参数将存储在一个名为SParameter的变量中,该变量被分配为私有成员。 main()是固定的。
所以这是我教授的,
#include <iostream>
using namespace std;
class shape {
private:
string name;
double length;
double Tperimeter;
public:
void perimeter()
{
if (name == "circle")
{
cout<<"enter the diameter:";
cin>>length;
Tperimeter = 3.142* length;
}
if (name == "triangle")
{
cout<<"enter side length:";
cin>>length;
Tperimeter = 3*length;
}
if (name == "square")
{
cout<<"enter side length:";
cin>>length;
Tperimeter = 4*length;
}
}
double display(string shapename)
{
name=shapename;
if (name == "circle")
{
perimeter();
return Tperimeter;
}
if (name == "triangle")
{
perimeter();
return Tperimeter;
}
if (name == "square")
{
perimeter();
return Tperimeter;
}
} };
int main() {
shape S;
char c;
string name;
do
{
cout<<"Enter name of shape:";
cin>>name;
cout<<"the perimeter of "<<name<<"is:"<< S.display(name)<<endl;
cout<<"do you wish to continue?";
cin> c;
}while(c!='n');
return 0; }
这是我的代码,
#include <iostream>
using namespace std;
class shape{ private:
int Sparameter;
int perimeter;
string name; public:
shape(){
}
int display(string name){
if(name=="circle"){
cout<<"Enter the diameter of the circle";
cin>>Sparameter;
perimeter=3.14*Sparameter/2;
}
else if(name=="square"){
cout<<"Enter the length of the square";
cin>>Sparameter;
perimeter=4*Sparameter;
}
else if(name=="triangle"){
cout<<"Enter the length of the triangle";
cin>>Sparameter;
perimeter=3*Sparameter;
return perimeter;
}
} };
int main() {
shape S;
char c;
string name;
do
{
cout<<"Enter name of shape:";
cin>>name;
cout<<"the perimeter of "<<name<<"is:"<< S.display(name)<<endl;
cout<<"do you wish to continue?";
cin>> c;
}while(c!='n');
return 0; }
所以我的问题在输出上,如果使用Codeblock,这是我和我的教授代码的输出。
输入形状名称:圆形圆的周长:输入直径:1031.42您要继续吗?
“圆的周长”的提示将出现在“输入直径”之前。但是,如果使用在线gdb之类的在线编译器。对于我的教授的代码,其输出是不同的。
输入形状名称:圆形输入直径:30圆的周长:94.26您要继续吗?
“输入直径”部分将出现在“圆的周长”之前,即使在cout部分中“圆的周长”位于调用S.display()函数之前。
cout <
那么输入直径如何首先出现?我问我的教授,他说关键是在一个函数内调用一个函数。但这并不能为我解释太多,我想念什么吗?程序的流程不是从左到右吗?
谢谢。
cout<<"the perimeter of "<<name<<"is:"<< S.display(name)<<endl;
// ^
// |
// I'm going to focus on this << operator
由于未指定计算操作数的顺序,因此编译器可以选择首先评估标记的运算符的左侧还是右侧。对两个操作数的求值都有副作用(即打印输出),因此这些副作用可以按任何顺序出现。
如果编译器选择首先评估左侧(
cout<<"the perimeter of "<<name<<"is:"
),则其输出将首先出现,并且您将看到类似的输出
如果编译器选择先评估右侧(
S.display(name)
),则其输出将首先出现,并且您将看到类似的输出
Enter name of shape:circle
the perimeter of circleis:enter the diameter:10
31.42
do you wish to continue?
C ++ 17纠正了所有这些问题。现在需要从左到右对操作数进行求值,因此,如果使用兼容C ++ 17的编译器进行编译,则始终会看到输出,例如
Enter name of shape:circle the perimeter of circleis:enter the diameter:10 31.42 do you wish to continue?
编译器
无法选择在
S.display(name)
之前评估cout<<"the perimeter of "<<name<<"is:"
。这说明了您看到的不同输出。您的本地编译器选择首先评估
<<
运算符的左侧,而在线编译器选择首先评估右侧的运算符。
Enter name of shape:circle
enter the diameter:30
the perimeter of circleis:94.26
do you wish to continue?
以上是关于不是从左到右输出吗?的主要内容,如果未能解决你的问题,请参考以下文章