为具有结构和枚举的类重载赋值运算符

时间:2015-08-11 19:48:35

标签: c++ class operator-overloading overloading assignment-operator

我试图为此类重载赋值运算符。 如何为包含结构和枚举器的类做到这一点?

class Config
{
public:
    Config() { SetDefaults(); }
    Config(const std::string& path);

    enum FeatureType
    {
        kFeatureTypeHaar,
        kFeatureTypeRaw,
    };

    enum KernelType
    {
        kKernelTypeLinear,
        kKernelTypeGaussian };

    struct FeatureKernelPair
    {
        FeatureType feature;
        KernelType kernel;
        std::vector<double> params;
    };

bool quietMode;    
std::string sequenceBasePath
int frameHeight;
std::vector<FeatureKernelPair>  features;

friend std::ostream& operator<< (std::ostream& out, const Config& conf);

private:
    void SetDefaults();
    static std::string FeatureName(FeatureType f);
    static std::string KernelName(KernelType k);
};

这是我尝试过的。这是做到这一点的一般方法,对吧..?

Config & operator=(Config const&c) {
    if(this != &c){
            quietMode = c.quietMode;
            sequenceBasePath = c.sequenceBasePath;
            frameHeight = c.frameHeight;
            features = c.features;
        }
    return *this;

}

1 个答案:

答案 0 :(得分:0)

这是一种方法(假设您已将运算符定义为成员)。

CoryKramer在评论中提出的复制交换idom肯定是一种更好的方法(只要你们都有一个复制操作符并定义一个交换函数)。

尽管如此,在您的特定情况下,Config类仅包含已具有复制 - 分配运算符的成员。因此,您不需要提供自己的:编译器生成的默认值将按成员副本组织成员。