设为首页 加入收藏

TOP

C++笔记一(创建一个不带指针成员变量的类)[注意事项](二)
2017-01-11 08:14:55 】 浏览:595
Tags:笔记 创建 一个 指针 成员 变量 注意事项
下面通过代码例子说明:

#include 
class X 
{
public:
    X(){}
    X(int){} // int 类型可以被隐式转换成 X
    friend bool operator<(const X& x1, const X& x2) { return true; } // 只是测试,无意义
};

class Y 
{
public:
    Y(){}
    Y(int){} // int 类型可以被隐式转换成 Y
    bool operator<(const Y& y) const { return true; } // 只是测试,无意义
};
int main()
{
    X x;
    if(1 < x) // 合法,使用友元重载函数,1 可以被隐式地转换为 X 类型 --友元函数的第一个参数
    {}

    Y y;
    if(1 < y) // 不合法,使用成员重载函数,函数的第一个参数是 const *this,1 不能被隐式转换
    {}
    return 0;

}

// 注:编译的时候可以通过注释掉不同的代码来查看错误(即合法性),后面解释不能作为友元全局重载的原因

由上面的代码可以知道,如果将 =,[],(),-> 进行友元全局重载,那么就会出现 1=x; 1[x]; 1->x; 1(x); 这样的合法语句(起码编译器认为这些是合法的)--参考代码中的 if(1

#include 

class X 
{
public:
    X(){}
    X(int){} // int 类型可以被隐式转换成 X
    friend const X& operator+=(const X& x1, const X& x2) { return x1; } // 只是测试,无意义
};

int main()
{
    X x;
    1 += x;// 合法,使用友元重载函数,1 可以被隐式地转换为 X 类型 --友元函数的第一个参数
    return 0;
}
首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇c++通过运算符[]重载实现一重和二.. 下一篇c++虚函数之多态的使用说明

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目