1

より明確に言うと、() を使用してオブジェクトを作成するときにインスタンス変数にアクセスしようとすると、コンパイル時エラーが発生しますが、アクセスしないと、コードはコンパイルされ、期待どおりに実行されます。また、この問題はデフォルト コンストラクターにのみ適用されます。その理由を理解したいと思います。

using namespace std;
#include <iostream>

class Student {

  public:

    int gpa;

    Student() { 
      gpa = 4;
    }

    Student( int x ) { 
      gpa = x; 
    }

};

int main() {

  Student zero;
  Student sally( 2 ); 
  Student jack();

  cout << zero.gpa << endl; //prints 4
  cout << sally.gpa << endl; // prints 2
  cout << jack.gpa << endl; //error: request for member 'gpa' in 'jack', which is of non-class type 'Student()'

}
4

5 に答える 5

2

Object b(); の違いは何ですか? およびオブジェクト b;?

違いがあるのは、C++ がそれを作成中のオブジェクトではなく、宣言中の関数として解釈するためです。

Object b;

これは、デフォルト コンストラクターによって作成されるbクラスのオブジェクトです。Object

Object b();

これは functionb()であり、 class のオブジェクトを返すように宣言されています (別の場所で定義されます) Object。パラメーターはありません。

お役に立てれば。

于 2013-06-28T20:49:47.850 に答える
0

私はこれを試してみます

クラス学生{

公衆:

int gpa = 4;

Student() { };
于 2013-06-28T20:49:57.597 に答える