加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何创建可以初始化C数据类型的类?

发布时间:2020-12-16 10:19:49 所属栏目:百科 来源:网络整理
导读:标题基本上都说明了一切.我主要想这样做,这样我就可以创建一个对象(比如一个自定义字符串对象),可以初始化其他API中其他函数的参数.以下是我尝试使用自定义整数类的示例: #include iostreamusing namespace std;class test{public: int member; test(int i)
标题基本上都说明了一切.我主要想这样做,这样我就可以创建一个对象(比如一个自定义字符串对象),可以初始化其他API中其他函数的参数.以下是我尝试使用自定义整数类的示例:

#include <iostream>
using namespace std;

class test
{
public:
    int member;
    test(int i) : member(i) {}

    friend int &operator=(int &i,test t);
};

int &operator=(int &i,test t)
{
   return (i = t.member);
}

int main()
{
    int i;
    test t = 90;

    cout << (i = t);
    return 0;
}

不幸的是我收到一个错误,说operator =需要是一个成员函数.我理解C标准的目标是防止赋值运算符的静态和非成员重载被实现,但有没有其他方法可以做到这一点?感谢您的任何帮助/建议!

解决方法

您要做的是需要转换运算符

operator int() 
{
    return this->member;
}

对于您尝试编写的类(仅包含整数成员),您不需要重载=运算符.

= operator是编译器默认为每个类生成的成员函数之一.需要注意的是,它会对类成员进行简单的逐位复制(浅拷贝),因为你只有整数,它应该对你来说足够好.

如果你动态地将指针指定为成员函数,则需要重载=运算符,因为在这种情况下,这些指针的浅表副本将导致所有包含成员指针的对象指向相同的动态内存位置&如果其中一个对象完成了它的生命周期,则其他对象会留下一个悬空指针.
正如@Tony,恰当地指出评论浅拷贝通常是坏的但不总是.请参阅他对场景的评论.

如果您想要重载赋值运算符,请检查Copy and Swap Idiom以正确的方式执行.

您还应该查看Rule of Three.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读