C++ 带类和向量的重载赋值运算符
我定义了一个类:C++ 带类和向量的重载赋值运算符,c++,vector,operator-overloading,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* inpu
#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
我得到了buf受保护和长度受保护的错误代码。我不确定我错过了什么。如何使用
向量
和整数
正确重载赋值运算符?您需要将实现定义为类的一部分。您缺少类说明符:
// vvvvvvvv
String& String::operator=(const String& input) {
buf = input.buf;
length = input.length;
return *this;
}
如前所述,您正在定义一个自由操作符重载(不绑定到类),实际上它是要声明一个自由赋值操作符重载
从不是
String
成员的自由运算符重载的角度来看,buf
和length
确实是不可访问的,因为它们是私有的。您需要将实现定义为类的一部分。您缺少类说明符:
// vvvvvvvv
String& String::operator=(const String& input) {
buf = input.buf;
length = input.length;
return *this;
}
如前所述,您正在定义一个自由操作符重载(不绑定到类),实际上它是要声明一个自由赋值操作符重载
从不是
String
成员的自由运算符重载的角度来看,buf
和length
确实是不可访问的,因为它们是私有的。您需要将实现定义为类的一部分。您缺少类说明符:
// vvvvvvvv
String& String::operator=(const String& input) {
buf = input.buf;
length = input.length;
return *this;
}
如前所述,您正在定义一个自由操作符重载(不绑定到类),实际上它是要声明一个自由赋值操作符重载
从不是
String
成员的自由运算符重载的角度来看,buf
和length
确实是不可访问的,因为它们是私有的。您需要将实现定义为类的一部分。您缺少类说明符:
// vvvvvvvv
String& String::operator=(const String& input) {
buf = input.buf;
length = input.length;
return *this;
}
如前所述,您正在定义一个自由操作符重载(不绑定到类),实际上它是要声明一个自由赋值操作符重载
从不是
String
成员的自由运算符重载的角度来看,buf
和length
确实是不可访问的,因为它们是私有的。您不需要为类提供任何特殊的成员函数,因为编译器合成的函数在这种情况下会做正确的事情。最好的选择是从类定义中删除赋值运算符并复制构造函数
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);
};
类字符串
{
受保护的:
整数长度;
向量buf;
公众:
字符串();
字符串(常量字符*输入);
字符串(字符输入);
字符串(int输入);
字符串(字符输入,整数输入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);
};
类字符串
{
受保护的:
整数长度;
向量buf;
公众:
字符串();
字符串(常量字符*输入);
字符串(字符输入);
字符串(int输入);
字符串(字符输入,整数输入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);
};
类字符串
{
受保护的:
整数长度;
向量buf;
公众:
字符串();
字符串(常量字符*输入);
字符串(字符输入);
字符串(int输入);
字符串(字符输入,整数输入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);
};
类字符串
{
受保护的:
整数长度;
向量buf;
公众:
字符串();
字符串(常量字符*输入);
字符串(字符输入);
字符串(int输入);
字符串(字符输入,整数输入2);
};
隐式生成的赋值运算符也执行相同的操作,因此,如果函数中除了此处显示的内容之外没有其他内容,那么最好不要自己定义它(或在C++11中定义为default
),隐式生成的赋值运算符也执行相同的操作,因此,如果函数中除了此处显示的内容之外没有其他内容,那么最好不要自己定义它(或在C++11中定义为default
),隐式生成的赋值运算符也会执行相同的操作,因此,如果函数中除了此处显示的内容之外没有其他内容,那么最好不要自己定义它(或在C++11中定义为default
),隐式生成的赋值运算符也会执行相同的操作,因此,如果函数中除了这里显示的内容之外没有其他内容,那么最好不要自己定义它(或者在C++11中定义为default
)