3

我正在为傻瓜看 c++ 并找到了这段代码

#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;

int nextStudentId = 1000; // first legal Student ID
class StudentId
{
public:
StudentId()
{
    value = nextStudentId++;
    cout << "Take next student id " << value << endl;
}

// int constructor allows user to assign id
StudentId(int id)
{
    value = id;
    cout << "Assign student id " << value << endl;
}
protected:
int value;
};

class Student
{
public:
Student(const char* pName)
{
     cout << "constructing Student " << pName << endl;
     name = pName;
     semesterHours = 0;
     gpa = 0.0;
 }

protected:
string    name;
int       semesterHours;
float     gpa;
StudentId id;
};

int main(int argcs, char* pArgs[])
{
// create a couple of students
Student s1("Chester");
Student s2("Trude");

// wait until user is ready before terminating program
// to allow the user to see the program results
system("PAUSE");
return 0;
}

这是输出

拿下一个学生证 1000

构建学生切斯特

取下一个学生证 1001

构建学生特鲁德

按任意键继续 。. .

我很难理解为什么第一个学生 id 是 1000,如果 value 添加一个然后打印出来

这有意义吗

就在studentId的构造函数中,两行代码取nextStudentId并添加一行,然后打印出来

输出不会是这样的:

取下一个学生证 1001

构建学生切斯特

取下一个学生证 1002

构建学生特鲁德

按任意键继续 。. .

希望你明白我想说的

谢谢

卢克

4

5 回答 5

9

++ 是增量运算符:它首先读取值(并将其分配给变量),然后才对其进行增量。

将此与增量运算符进行对比:

value = ++nextStudentId;

这将具有您期望的行为。

查看这个问题以获取更多信息:Incrementing in C++ - When to use x++ or ++x?

于 2010-11-26T18:09:30.927 回答
5
value = nextStudentId++;

这使用了所谓的后增量运算符。Doing将首先使用fornextStudentId++的当前值,然后其递增。因此,第一轮将是 1000,之后将立即变为 1001,依此类推。nextStudentIdvaluevaluenextStudentId

如果您改为:

value = ++nextStudentId;

这是预增量运算符,您将看到您之前的期望。

于 2010-11-26T18:11:04.643 回答
4

在 C 和 C++ 中,递增(和递减)运算符以两种形式出现

  1. 前缀 - ++Object
  2. 后缀 - 对象++

前缀形式递增然后返回值,而后缀形式获取值的快照,递增对象然后返回先前拍摄的快照。

T& T::operator ++(); // This is for prefix
T& T::operator ++(int); // This is for suffix

请注意,第二个运算符有一个虚拟 int 参数,这是为了确保这些运算符具有不同的签名。

您可以覆盖这些运算符,但它确保在覆盖的实现中保持语义以避免混淆。

于 2010-11-26T18:20:42.087 回答
1

试试这个

value = ++nextStudentId;
于 2010-11-26T18:11:54.780 回答
1

你知道运算符“x++”和“++x”是如何工作的吗?

"x++" 首先返回 x 的值,然后递增 x

例如:

int x = 1;
std::cout << x++ << std::endl; // "1" printed, now x is 2
std::cout << x << std::endl; // "2" printed

"++x" 先递增 x,然后返回递增值

int y = 1;
std::cout << ++y << std::endl; // "2" printed, y is 2
std::cout << y << std::endl; // "2"
于 2010-11-26T18:13:44.740 回答