使用类和向量重载赋值运算符

时间:2014-08-05 04:11:37

标签: c++ vector operator-overloading

我定义了一个类:

#ifndef _STRINGCLASS_H
#define _STRINGCLASS_H
using namespace std;

#include <iostream>
#include <vector>

class String {
protected:
    int length;
    vector<string> buf;

public:
    String();
    String(const char* input);
    String(char input);
    String(int input);
    String(const String& input);
    String(char input, int input2);

    String& operator=(const String& input);


};

#endif

并尝试通过以下方式重载赋值运算符:

String& operator=(const String& input) {

    buf = input.buf;
    length = input.length;

    return *this;
}

我得到了buf受保护且长度受到保护的错误代码。我不确定我错过了什么。如何使用vectorsints

正确地重写赋值运算符

2 个答案:

答案 0 :(得分:2)

您不需要为您的类提供任何特殊的成员函数,因为编译器合成的函数在这种情况下会做正确的事情。最好的选择是从类定义中删除赋值运算符和复制构造函数。

class String 
{
protected:
    int length;
    vector<string> buf;

public:
    String();
    String(const char* input);
    String(char input);
    String(int input);
    String(char input, int input2);
};

答案 1 :(得分:1)

您需要将实现定义为类的一部分。您缺少类说明符:

//      vvvvvvvv
String& String::operator=(const String& input) {

    buf = input.buf;
    length = input.length;

    return *this;
}

如上所述,您正在定义一个自由运算符重载(未绑定到类),并且它实际上invalid无论如何都要声明自由赋值运算符重载。

从免费运算符重载的角度来看,String的成员,buflength确实无法访问,因为它们是私有的。