我正在寻找c ++ for dummies并找到了这段代码
#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
建立学生切斯特
下一个学生ID 1001
构建学生特鲁德
按任意键继续。 。
我很难理解为什么第一个学生ID是1000,如果值加一个然后将其打印出来
这是否有意义
在studentId的构造函数中,两行代码取nextStudentId
并添加一行然后打印出来
输出不会是这样的:
下一个学生ID 1001
建立学生切斯特
接下来的学生ID 1002
构建学生特鲁德
按任意键继续。 。
希望你得到我想说的话
路
答案 0 :(得分:9)
++是 post -increment运算符: first 读取值(并将其分配给变量),只有然后递增它。
将此与 pre -increment运算符对比:
value = ++nextStudentId;
这会产生你期望的行为。
请查看此问题以获取更多信息:Incrementing in C++ - When to use x++ or ++x?
答案 1 :(得分:5)
value = nextStudentId++;
这使用所谓的后增量运算符。执行nextStudentId++
将首先使用nextStudentId
的当前值value
,然后 增加它。因此,第一次,value
将为1000,nextStudentId
将立即成为1001,依此类推。
如果您改为:
value = ++nextStudentId;
这是预增量运算符,您将看到之前的预期。
答案 2 :(得分:4)
在C和C ++中,递增(和递减)运算符以两种形式出现
前缀形式递增然后返回值,但是后缀形式获取值的快照,增加对象然后返回先前拍摄的快照。
T& T::operator ++(); // This is for prefix
T& T::operator ++(int); // This is for suffix
请注意第二个运算符有一个伪int参数,这是为了确保这些运算符的不同签名。
您可以覆盖这些运算符,但它确保在重写的实现中维护语义以避免混淆。
答案 3 :(得分:1)
试试这个
value = ++nextStudentId;
答案 4 :(得分: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"