具有Const成员的构造函数的语法

Chr*_*ice 0 c++ const

我有一段时间没有做过C++编码,我的朋友在做作业时遇到了麻烦.我从来没有真正合作过const,而且这使得这成为一场噩梦,因为我无法弄清楚构造函数的正确语法.想象一下,我有这个dvd.h:

class DVD {
    const string title;
    int minutes;
    double price;

  public:
    DVD(const string t, int m, double p);
}
Run Code Online (Sandbox Code Playgroud)

3个私有成员变量,stringconst.构造函数也需要一个const string.

所以现在,dvd.cpp我可以做以下事情:

#include "dvd.h"

DVD::DVD(const string t, int m, double p) {
    const string title = t;
    minutes = m;
    price = p;
}
Run Code Online (Sandbox Code Playgroud)

一切都在世界上很好.然而,当我修改minutesdvd.hconst(这是他的教授是如何构造的文件),我们有这样的dvd.h:

class DVD {
    const string title;
    const int minutes; // Here is the change
    double price;

  public:
    DVD(const string t, int m, double p);
}
Run Code Online (Sandbox Code Playgroud)

所以,现在minutes就是const,我得到下面的编译错误:

assignment of read-only member 'DVD::minutes'   dvd.cpp
uninitialized member 'DVD::minutes' with 'const' type 'const int' [-fpermissive]    dvd.cpp
Run Code Online (Sandbox Code Playgroud)

我认为这是有道理的,因为我试图将值设置const变量.所以我尝试做与const string titlein 相同的事情dvd.cpp来解决错误:

DVD::DVD(const string t, int m, double p) {
    const string title = t;
    const int minutes = m; // Was 'minutes = m;'
    price = p;
}
Run Code Online (Sandbox Code Playgroud)

并得到以下(1)错误和(1)警告:

uninitialized member 'DVD::minutes' with 'const' type 'const int' [-fpermissive]    dvd.cpp
unused variable 'minutes' [-Wunused-variable]   dvd.cpp
Run Code Online (Sandbox Code Playgroud)

所以我想我正在努力弄清楚这个darn语法是什么 ...... title并且minutes应该是const,但是构造函数的参数列表DVD只需要一个const string.我无法弄清楚我错过了什么 - 自从我上次用C++编写代码以来已经有一段时间了.

Mik*_*our 8

const string title = t;
Run Code Online (Sandbox Code Playgroud)

那声明了一个局部变量.一切都与世界不符:你没有将成员变量设置为你想要的值.要初始化成员,请使用构造函数的初始化列表:

DVD::DVD(const string t, int m, double p) :
    title(t), minutes(m), price(p)
{}
Run Code Online (Sandbox Code Playgroud)

您的版本尝试默认初始化每个成员(因为初始化列表中未提及它们),然后分配每个成员.这对于无法初始化的成员(例如引用或没有默认构造函数的类类型)或分配给(例如const成员)的成员不起作用.