zoukankan      html  css  js  c++  java
  • C++模板类的一个赋值问题

    对于以下类模板,如果想要实现类赋值,使用assign()函数。如下

    template<class T>
    class MyClass{
    private:
        T value;
    public:
        void setValue(T& _value){
            value = _value;
        }
        void assign(const MyClass<T> &x){
            value = x.value;
        }
        T getValue(){
            return value;
        }
    };
    int main(void)
    {
        MyClass<double> d;
        MyClass<double> dd;
        double temp=23.123;
        d.setValue(temp);
        dd.assign(d);
        cout << d.getValue() << endl << dd.getValue() << endl;
        return 0;
    }

    如果,两个类的 T 不一样,再使用assign()方法进行赋值

    int main(void)
    {
        MyClass<double> d;
        MyClass<int> i;
        double temp=23.123;
        d.setValue(temp);
        i.assign(d);
        cout << d.getValue() << endl << i.getValue() << endl;
        return 0;
    }

    问题如下

    可以看到,assign()函数渴望要一个const MyClass<int>类型的对象作为参数,但是却得到了一个MyClass<double>的对象。同时MyClass<double>无法转换为const MyClass<int>,于是编译器就会报错。

    我们需要重新定义一下MyClass的assign函数,使得上述赋值行的通。

        template<class X>                                   //添加X
        void assign(const MyClass<X> &x){           //把要用来赋值的x定义成另一种类型X
            value = x.getValue();
        }

    这样,上述赋值就可以工作了。

    只要从X到T的赋值可以执行,那这个assign函数就可以执行。这样其实是避免了必须要让assign函数参数中的 T 必须和assign所属对象的 相同。

  • 相关阅读:
    找出占用磁盘空间最大的前10个文件或文件夹
    把inline函数的定义放在头文件中
    判断是大端字节序还是小端字节序
    在source insight 中添加系统字体
    C++ inline 函数
    标准I/O函数库的三类缓冲
    内存分配失败错误处理
    P1765 手机
    P1321 单词覆盖还原
    P1308 [NOIP2011 普及组] 统计单词数
  • 原文地址:https://www.cnblogs.com/mindulmindul/p/12149235.html
Copyright © 2011-2022 走看看