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;
}

これが出力です

次の学生ID1000を取る

学生チェスターの構築

次の学生ID1001を取得します

学生の真実を構築する

何かキーを押すと続行します 。。。

値がそれに1を追加してからそれを出力する場合、最初の学生IDが1000である理由を理解するのに非常に苦労しています。

これは意味がありますか

StudentIdのコンストラクターで、2行のコードを取得nextStudentIdして1つ追加すると、出力されます。

出力は次のようなものではありません:

次の学生ID1001を取得します

学生チェスターの構築

次の学生ID1002を取得します

学生の真実を構築する

何かキーを押すと続行します 。。。

私が言おうとしていることをあなたが理解してくれることを願っています

ありがとう

ルーク

4

5 に答える 5

9

++はポストインクリメント演算子です。最初に値を読み取り(そしてそれを変数に割り当て)、次にそれをインクリメントします。

これをpre -increment演算子と比較してください。

value = ++nextStudentId;

これはあなたが期待する振る舞いをするでしょう。

詳細については、この質問を参照してください。C++でのインクリメント-x++または++xをいつ使用するか。

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

これは、いわゆるポストインクリメント演算子を使用します。実行すると、最初にfornextStudentId++の現在の値が使用され、その後それがインクリメントされます。したがって、最初のラウンドは1000になり、直後は1001になります。nextStudentIdvaluevaluenextStudentId

代わりに行う場合:

value = ++nextStudentId;

これはプリインクリメント演算子であり、以前に期待していたものが表示されます。

于 2010-11-26T18:11:04.643 に答える
4

CおよびC++では、インクリメント(およびデクリメント)演算子は2つの形式で発生します

  1. プレフィックス-++Object
  2. sufix-Object ++

プレフィックスフォームはインクリメントしてから値を返しますが、サフィックスフォームは値のスナップショットを取得し、オブジェクトをインクリメントしてから、以前に取得したスナップショットを返します。

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

2番目の演算子にはダミーの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 に答える