您的位置:程序门 -> c/c++ -> c++ 语言



关于强制转换操作符的问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


关于强制转换操作符的问题[已结贴,结贴人:yndfcd]
发表于:2007-01-12 13:28:23 楼主
有如下代码

class   vertex
{   float   x,y,z;};
class   mvertex   :   public   vertex
{
    operator   vertex()
    {
          swap(   y,   z   );
          return   vertex(   x,   z,   y   );
    }
    operator   vertex&()
    {
        swap(   y,   z   );
        return   (vertex&)*this;
    }
    operator   const   vertex&()
    {
        swap(   y,z   )
        return   (const   vertex&)*this;
    }
    mvertex&   operator=(   const   vertex&   a   );
}

vertex   operator+(   const   vertex&   a,   const   vertex&   b   );

然后有如下调用

mvertex   a,b;

a   =   a   +   b;//这里总是调用上面定义的这个operator+,而没有调用强制转换操作符
operator   const   vertex&(),   因此,这里的得到的结果总是错的.

为什么会产生这样的问题呢?
发表于:2007-01-12 13:32:491楼 得分:0
a   =   a   +   b;
==》
a   =   a   +   (vertex)b;
发表于:2007-01-12 13:33:182楼 得分:0
显式强制转换,
调用   强制转化运算符   ···
发表于:2007-01-12 13:36:493楼 得分:0
const   vertex&   e   =   (   const   vertex&)   a;

上面段代码,仍然没有调用operator   const   vertex&()
发表于:2007-01-12 13:37:494楼 得分:100
父类引用引到子类对象,这是一种标准“转换”,其优先级比用户自定义的转换优先级高。
用户自定义的转换一般只会发生在那种“否则编译器就不知道该怎么换换”的时候。
发表于:2007-01-12 13:56:205楼 得分:0
class   mvertex   :   public   vertex
不要继承,   把vertex作为mvertex   的私有成员就可以了


快速检索

最新资讯
热门点击