【问题标题】:How do you define a default property for a c++ class?如何为 c++ 类定义默认属性?
【发布时间】:2015-04-25 07:51:48
【问题描述】:

我希望能够做这样的事情:

myDataType Data1; 
myDataType Data2;

Data1 = "Something";
Data2 = Data1;

设置 Data1 很容易,因为我重载了 = 运算符。我想做的是按原样输入第 2 行。如果没有默认属性,我必须将其键入为:

Data2 = Data1.theDesiredProperty;

在我看来应该可以做到这一点,因为字符串类以这种方式工作。如果将“myDataType”替换为“string”(并包含字符串头文件),则不必引用字符串的某些默认属性。

谢谢。

【问题讨论】:

  • “设置 Data1 很容易,因为我重载了 = 运算符”。那里没有使用该运算符。
  • 这个数据类型已经有四个重载的构造函数。但是要从这种数据类型的实例中获取值,我目前必须输入:myDataType.value。我在一个小组环境中工作,不必这样做会很有用。
  • juan,这里确实存在那个运算符。 jrok,重载运算符不是我的问题,我们为大约 10 个不同的运算符定义了大约 7 个用于不同数据类型的运算符。问题是如何从右侧参数中提取默认属性。也就是说,我目前必须输入:Data2 = Data1.someproperty;
  • 卡罗莉,这可能是我需要的。谢谢。

标签: c++ class object


【解决方案1】:

我认为这里最有用的是看一个如何做到这一点的示例:

class myDataType {
    public:
        myDataType(const char *message = ""): message_(message) {}

        const char * message() const {
            return message_;
        }

    private:
        const char *message_;
};


int main() {
    myDataType Data1;
    myDataType Data2;

    Data1 = "Something";
    Data2 = Data1;

    myDataType Data3 = "Something";
    myDataType Data4 = Data1;
}

【讨论】:

  • 在这种情况下显式关键字有什么作用?不阻止隐式转换吗?
  • 感谢您选择帮助我解决这个问题的类型。 :-)
  • 哦,哇,这个编辑是一个新的结构。你能解释一下消息部分发生了什么吗? (第 3 行)
【解决方案2】:

好的,所以答案是全局重载运算符并使用访问器函数从对象中读取所需的属性。我在运算符重载方面的所有经验都是将它们放在类中,并且在那个位置,它们只处理位于左侧的对象。为了以我想要的方式处理右侧的对象,运算符重载应该在类定义之外并使用关键字friend。我不知道为什么要获得那条缺失的信息如此困难,但如果其他人正在寻找,那就是这里。

friend bool operator==(const std::string& lhs, const myDataType& rhs);

【讨论】:

    猜你喜欢
    • 2012-06-11
    • 2012-10-03
    • 1970-01-01
    • 2020-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    相关资源
    最近更新 更多