What is the difference between Object b(); and Object b;?

懵懂的女人 提交于 2019-12-02 07:11:48

问题


To be more explicit, I get a compile time error when I try accessing an instance variable when I create an object using (), but when I don't, the code compiles and runs as expected. Also, this problem only applies to the default constructor. I would like to understand why.

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()'

}

回答1:


The problem is that Student jack(); declares a function with Student as a return type. It doesn't declare an object of that class as you expect.




回答2:


  Student jack();

declares a function that returns student and takes no arguments. Not an object!

See more in this gotw




回答3:


"Object b();" declares a function b() returning an object of type Object, while "Object b;" defines a variable b of type Object.

No, it's not obvious, and it still comes back to bite me if I switch between C++, Java, and C#. :-)




回答4:


What is the difference between Object b(); and Object b;?

The difference exists because C++ interprets that as a function being declared, instead of an object being created.

Object b;

This is the object b of class Object being created by means of the default constructor.

Object b();

This is the function b(), being declared (it will be defined elsewhere) to return an object of class Object, and no parameters.

Hope this helps.




回答5:


I would try this

class Student {

public:

int gpa = 4;

Student() { };


来源:https://stackoverflow.com/questions/17373339/what-is-the-difference-between-object-b-and-object-b

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!