何时使用()类?

IAE*_*IAE 1 c++ function linked-list

这真的开始让我感到困惑.我何时使用它们,何时不使用它?

例如,我在链接列表上读取.cpp,其类声明为:

struct CarPart
{
    long PartNumber;
    char Partname[40];
    double UnitPrice;

    CarPart *next;
};

class ListOfParts
{
    int size;

public:
    CarPart *head;

    ListOfParts();
    ~ListOfParts();

    const int count() const;
    void insert( CarPart *item );
    CarPart *retrieve( int pos );
};
Run Code Online (Sandbox Code Playgroud)

有了这段代码,为什么我可以写

ListOfParts *pPart = new ListOfParts();
CarPart *pCarPart = new CarPart;
Run Code Online (Sandbox Code Playgroud)

声明ListOfParts的实例需要(),但不是我的CarPart?那令我困惑.当我之前问过一个问题时,人们告诉我这样的声明是一个返回ListOfParts对象的函数,而不是实际的构造函数.所以我猜这仍然是不同的东西.

这里发生了什么事?

PS:我是否正确假设count()右边的const意味着我无法修改count中的任何值?

Ale*_*x B 9

在堆上分配时,ListOfParts不需要声明类的实例().两种形式都有效:

ListOfParts *pPart1 = new ListOfParts();
ListOfParts *pPart2 = new ListOfParts;
Run Code Online (Sandbox Code Playgroud)

编辑: 正如评论者指出的那样,在初始化POD类型会有所不同(但是与您的代码示例无关).

但是,在声明堆栈变量或静态变量时,这很重要,因为表单与()声明函数相同.

ListOfParts pPart1(); // a function prototype
ListOfParts pPart2; // a object construction
Run Code Online (Sandbox Code Playgroud)

const到右边count()意味着你不能修改任何值,当前对象内部在此功能中,这将是this->sizethis->head(注意,你仍然可以改变的对象指向head).

  • POD类型有所不同 - 带括号的版本将零对象初始化. (4认同)
  • 确实如此.链接:http://stackoverflow.com/questions/906734/does-c-do-value-initialization-of-a-pod-typedef (2认同)