C++ C++;重载运算符不';t修改原始对象(通过引用传递)

C++ C++;重载运算符不';t修改原始对象(通过引用传递),c++,reference,operator-overloading,C++,Reference,Operator Overloading,我正在创建一个子类向量,我想重载它的=运算符(最初是+运算符),但如果我将它的结果分配给引用,它不会修改原始对象。 看来我对C++引用缺少了一些东西,但我不知道它是什么。 如果有人能指出错误,我将非常感激 下面是代码(在Ubuntu12上用g++编译) #包括 #包括 使用名称空间std; 类myvector:公共向量{ 公众: int n_元素; myvector(整数元素){ n_元素=元素; 储备(n_元素); } myvector(int元素,长双initWith){ n_元素=元素;

我正在创建一个子类向量,我想重载它的=运算符(最初是+运算符),但如果我将它的结果分配给引用,它不会修改原始对象。
看来我对C++引用缺少了一些东西,但我不知道它是什么。 如果有人能指出错误,我将非常感激

下面是代码(在Ubuntu12上用g++编译)

#包括
#包括
使用名称空间std;
类myvector:公共向量{
公众:
int n_元素;
myvector(整数元素){
n_元素=元素;
储备(n_元素);
}
myvector(int元素,长双initWith){
n_元素=元素;
储备(n_元素);
对于(int i=0;i此代码

myvector(int elems,long double initWith){
    n_elements = elems;
    reserve(n_elements);
    for (int i=0; i<n_elements; i++)    
        (*this)[i]=initWith;
}
myvector(int元素,长双initWith){
n_元素=元素;
储备(n_元素);

对于(int i=0;iSTL容器是,它们不提供虚拟析构函数。你不应该这样做。
reserve
不会调整向量的大小。
我正在创建一个子类向量
为什么?@juanchopanza:这看起来是答案。使用resize而不是reserve。我也同意你不应该从向量继承。你是关于这一点,真正的代码(为了我的问题,我在这里发布的是一个高度简化的代码片段)涉及矩阵(因此n_行和n_列被简化为n_元素)使用正态分布值进行初始化。经过一点测试,您的答案纠正了这个问题,我解决方案中的问题是保留,它不像我想的那样工作(作为问题状态中的注释,我应该使用resize)。谢谢!
myvector(int elems,long double initWith){
    n_elements = elems;
    reserve(n_elements);
    for (int i=0; i<n_elements; i++)    
        (*this)[i]=initWith;
}
myvector(int const elems, long double const initWith)
    : vector<long double>(elems, initWith)
{}