这是打字错误还是我漏了什么
is this a typo or am i missing something?
您好,我正在复习Bjarne Stroustrup的"C++编程语言",我面临着一段我认为应该是非法的代码片段,但它在文本中出现了。
我想知道这是否只是一个小小的疏忽,或者我是否遗漏了什么。
从第3章第63页开始:我们有如下用户定义的类型Vector:
class Vector {
private:
double* elem; // elem points to an array of sz doubles
int sz;
public:
Vector(int s) :elem{new double[s]}, sz{s} // constructor: acquire resources
{
for (int i=0; i!=s; ++i) elem[i]=0; // initialize elements
}
Vector(std::initializer_list<double>)
{
// initialize with a list
}
// ...
void push_back(double)
{
// add element at end increasing the size by one
}
~Vector() {
delete[] elem;
} // destructor: release resources
double& operator[](int i);
int size() const;
};
注意Vector有两个构造函数,一个只有大小,另一个有一个完整的初始值设定项列表,看起来像{2.0,3.1,4}
现在我们继续定义一个名为"Container"的抽象类,它看起来像这样:
class Container {
public:
virtual double& operator[](int) = 0; // pure virtual function
virtual int size() const = 0; // const member function (pure virtual)
virtual ~Container() {} // destructor
};
在这一点上,Bjarne希望通过定义一个继承自Container的具体类来证明Container的"抽象性",并碰巧使用Vector字段进行内部使用。在这里:
class Vector_container : public Container { // Vector_container implements Container
Vector v;
public:
Vector_container(int s) : v(s) { } // Vector of s elements
~Vector_container() {}
double& operator[](int i) { return v[i]; }
int size() const { return v.size(); }
};
请注意,VectorContainer在内部使用Vector对象。这个类只有一个显式构造函数,它接受容器的大小(并使用该大小传入其内部Vector的构造函数)。
现在回想一下,Vector还有另一个形式的构造函数:Vector(std::initializer_list)
这一切都很好,但让我困惑的是,教科书继续呈现了这样的代码:
void g()
{
Vector_container vc {10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
// use vc as a Container type
}
正如您所看到的,vc是VectorContainer的一个实例,它正被传递一个初始值设定项列表给它的构造函数。这让我很困惑。在VectorContainer的定义中没有提到这样的构造函数。
我在这里错过了什么?感谢
也许是写书人的疏忽。不过,自己创建构造函数应该没有问题:
class Vector_container : public Container {
public:
//...
Vector_container( std::initializer_list< double> a)
:v(a){
}
//...
}
你说得对,书上确实少了一些东西。
相关文章:
- 警告处理为错误这里有什么问题
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- 0-1背包代码中的错误.我的代码中有什么错误
- 是什么导致了Unity 3D中的"错误线程异常"?
- 如果我这样写,我的单例类会导致什么错误
- 为什么输出不同以及此代码中有什么错误
- 我的代码中有什么错误.我尝试在类中使用数组,但出现逻辑错误
- 使用 fopen 而不是 Visual Studio 建议的 fopen_s 有什么错误
- 我的 C++11 测试表明 sort(vector<string>) 甚至比 C++03 慢,有什么错误吗?
- 这个 c++ 结构有什么错误
- 什么错误的逻辑导致我的链表的这个 push_back(..) 函数失败?
- 我的类定义中有什么错误?
- realloc C 函数的可能包装函数有什么错误?
- 什么错误无法理解
- C++:使用STL矢量时有什么错误
- 下面的代码中有什么错误,应该如何更正
- 我错过了什么?c++错误
- 这里面有什么错误?字符串赋值
- 如果将此函数放在泛型库中,会导致什么错误?
- 我做错了什么? c++错误