zoukankan      html  css  js  c++  java
  • 第十八章 24友元的方式重载输出运算符 简单

    // 24友无的方式重载输出运算符
    //本节的开头首先讲一下运算符的知道,<<是按位左移运算符,但是当该符号与流对象,比如说cout连用地就变成了输出运算符,或者叫提取运算符
    //注意它们的区别,接位左移动算符是用来执行位移操作的,比如说
    //int num=1;
    //num<<1;
    //按位左移运算符(<<)将运算符左边的运算对像num向左移动运算符右侧指定的位数1,然后在低部补0
    //了解了它们的区另以后,接下来有个问题,按位左移运算符和输出运算符这两个符号是一样的,编辑器是如何来区分它们的,为了解释这个问题,我们需要返回到上一节的代码中
    /*
    #include <iostream>
    using namespace std;
    int main()
    {
        int num = 1;
    	int x = num<<1;
    	cout<<"x:"<<x<<endl;
    	int y = num>>2;
    	cout<<"y:"<<y<<endl;
    	return 0;
    }*/
    
    /*
    #include <iostream>
    using namespace std;
    class A
    {
    public:
    	A(int x, int y){
    	    rx = x;
    		ry = y;
    	};
    	//定义成友元函数,友元函数可以访问朋友类的私有属性
    	friend ostream&operator<<(ostream&s, const A&c)
    	{
    	    s<<c.rx<<endl;
    		s<<c.ry<<endl;
    		return s;
    	};
    private:
    	int rx;
    	int ry;
    };
    
    //现在这个重载输出运算符是整个合局的,任何cout都会调用该重载运算符
    //我们重载的这个运算符函数它的第一个参数接受的ostream对像的别名,编辑器就是根据这一点来区别的,当运算符左边的是ostream对像,比如说是cout时,就会调用这个函数来执行输出功能
    //而当运算符左边的不是流对象时,方才执行位移操作
    //很显然,我们定义的这个函数接受的是ostream对象,执行的也是输出功能,因此我们不能叫他按位移动算函数,而应该称作输出运算符函数,由于它是一个重载的函数,所以叫做重载输出运算符函数
    //ostream&operator<<(ostream&s, const A&c)
    //{
    	//s<<c.rx<<" ";
    	//s<<c.ry<<endl;
    	//return s;
    //};
    
    int main()
    {
    	A a(3,4), b(5,6);
        cout<<a<<b<<endl;
        return 0;
    	//这就是返回ostream类对象cout的作用,按位左移动算符<<可以连续使用,由于每次都会返回一个cout,所以中间不用加cout
    	//注意:由于cout是另一个类ostream的对像,ostream类没有公有和复制构造函数,因此函数无法调用该类的复制构造函数复制对象,必须按引用方式按受ostream的对像并且按引用方式返因ostream对象
    }
    */
    

      

  • 相关阅读:
    海康威视复赛题
    [转] A*寻路算法C++简单实现
    [转]程序进行性能分析工具gprof使用入门
    [转]KMP 算法
    boolalpha的用法和作用
    python与数据科学有多少“暧昧情事”?14个Q&A告诉你
    Python来袭,教你用Neo4j构建“复联4”人物关系图谱!
    深入理解BERT Transformer ,不仅仅是注意力机制
    Python开发者年度调研,结果出乎意料!
    R和Python,对抗or融合?
  • 原文地址:https://www.cnblogs.com/xiangxiaodong/p/2700744.html
Copyright © 2011-2022 走看看