解释这个程序的输出

Explain the output of this program

本文关键字:输出 程序 解释      更新时间:2023-10-16

我不知道这是如何工作的,代码真的很复杂,因为它是为我在编程类。当我手动完成它时,我似乎无法得到程序的输出,这是我们下周期末的练习测试,我不会在测试中作弊,教授给了我们程序和输出,我只是不明白为什么这是输出..:

class FinalExam
{
private:
   int This;
   int That;
public:
   FinalExam(int, int);
   void One(int);
   int  Two(int);
};
FinalExam :: FinalExam(int A = 3, int B = 5)
{
   This = A;
   That = B;
}
void FinalExam :: One(int A)
{
   This --;
   That = A;
}
int FinalExam :: Two(int A) // Two gets the int 8
{
   int Scrap; 
   Scrap = This + That - A; // 5 + 2 - 8 = -1???? 
   return Scrap;
}
main()
{
   FinalExam Block;
   FinalExam Chunk(6, 7);
   Block.One(2);
   cout << Block.Two(3) 
        << 'n'
        << Chunk.Two(8); //I get lost on this 8, It should go to "Two"
}

输出为:

1
5

我已经看了大约一个小时了,我还是不明白。

FinalExam Block;  // Not passing any arguments to the constructor. In that case, 
                  // default argument values are taken. So, This = 3, That = 5

Block.One (2);     // This = 2; That = 2
                   // Because This is decremented and That is assigned the value
                   // passed to the method which is 2.

cout << Block.Two (3) ;  // 2 + 2 - 3 = 1 which is returned and is printed.

同样尝试第二个

说明行与行之间的注释。

int main(int, char**) {
   FinalExam Block;
   // At this point ..
   // Block.This = 3;
   // Block.That = 5
   FinalExam Chunk(6, 7);
   // Chunk.This = 6
   // Chunk.That = 7
   Block.One(2);
   // Block.One decrement's This and assigns 2 to That so ..
   // Block.This = 2
   // Block.That = 2
   std::cout << Block.Two(3)
        // Block.Two(3) returns the result of this calculation
        // This + That - 3
        // This and That are both 2 at this point so..
        // 2 + 2 - 3 == 1
        // It returns 1 and prints out '1'
        << std::endl
        << Chunk.Two(8);
        // Chunk's This and That are 6 and 7 respectively so ..
        // cout << 6 + 7 - 8 == 5
}   

逐行崩溃:

1 FinalExam Block;
使用默认值的构造函数,因此Block.This = 3,并且Block.That = 5


2 FinalExam Chunk(6, 7);
使用构造函数,指定值,因此Chunk.This = 6Chunk.That = 7


3 Block.One(2);
递减Block.This(3 ==> 2),赋值Block.That = 2(原为5)。


4 Block.Two(3)
返回Block.This + Block.That -3 ==> 2+2-3 ==> 1,即输出


5 Chunk.Two(8)
返回Chunk.This + Chunk.That -8 ==> 6+7-8 ==> 5,即输出


Q.E.D.输出为"1 n 5"

首先,您将注意到我们创建了两个FinalExam类型的对象Block和Chunk。

块:由于block没有通过参数传递任何值,它将采用来自以下代码块的默认值:

    FinalExam :: FinalExam(int A = 3, int B = 5)
{
   This = A;
   That = B;
}

so This = 3 and That = 5

影响Block的下一行是:

Block.One(2);

指的是这个代码块:

void FinalExam :: One(int A)
{
   This --;
   That = A;
}

so This = 2 (This = This - 1 or This = 3 - 1)and That = 2(That = A = 2(by value in parameters)

影响Block的最后一行是:

cout << Block.Two(3) 

指的是这个代码块:

int FinalExam :: Two(int A) // Two gets the int 8
{
   int Scrap; 
   Scrap = This + That - A; // 5 + 2 - 8 = -1???? 
   return Scrap;
}

所以我们创建一个新的整数叫做Scrap = 1 (This + That - a或2 + 2 - 3(passed by value))

块:引用Chunk的第一行是:

FinalExam Chunk(6, 7);

这个集合A = 6和B = 7因为这个代码块:

FinalExam :: FinalExam(int A = 3, int B = 5)
{
   This = A;
   That = B;
}
(This = A = 6 and That = B = 7)

最后,我们有这一行:

Chunk.Two(8);

指的是这个代码块:

int FinalExam :: Two(int A) // Two gets the int 8
{
   int Scrap; 
   Scrap = This + That - A; // 5 + 2 - 8 = -1???? 
   return Scrap;
}

A被设置为8,因为我们通过形参传递了它的值and Scrap = 5 (b + 7 - 8 or This + That - A)

输出:我们从Block输出废料,它是1然后创建一条新线并从Chunk输出Scrap,该Chunk为5

希望这对你有所帮助,如果你有任何其他问题,请留下评论