码迷,mamicode.com
首页 > 编程语言 > 详细

C++程序设计方法2:基本语法2

时间:2017-03-26 21:09:26      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:sam   int   赋值运算符函数   style   友元   设计   声明   div   test   

对象赋值-赋值运算符重载

赋值运算符函数是在类中定义的特殊的成员函数

典型的实现方式:

ClassName& operator=(const ClassName &right)
{
    if (this != &right)
    {
      //将right的内容复制给当前的对象
}
return *this; }
#include <iostream>
using namespace std;

class Test
{
    int id;
public:
    Test(int i) :id(i) { cout << "obj_" << id << "created\n"; }
    Test& operator= (const Test& right)
    {
        if (this == &right)
            cout << "same obj!" << endl;
        else
        {
            cout << "obj_" << id << "=obj_" << right.id << endl;
            this->id = right.id;
        }
        return *this;
    }
};

int main()
{
    Test a(1), b(2);
    cout << "a = a:";
    a = a;
    cout << "a = b:";
    a = b;
    return 0;
}

流运算符重载函数的声明

istream& operator>>(istream& in, Test& dst);

ostream& operator<<(ostream& out, const Test& src);

备注:

函数名为:
  operaotor>>和operator<<

返回值为:
  istream& 和ostream&,均为引用

参数分别:流对象的引用,目标对象的引用。对于输出流,目标对象还是常量

#include <iostream>
using namespace std;

class Test
{
    int id;
public:
    Test(int i) :id(i)
    {
        cout << "obj_" << id << "created\n";
    }
    friend istream& operator >> (istream& in, Test& dst);
    friend ostream& operator << (ostream& out, const Test& src);
};
//备注:以下两个流运算符重载函数可以直接访问私有成员,原因是其被声明成了友元函数
istream& operator >> (istream& in, Test& dst)
{
    in >> dst.id;
    return in;
}

ostream& operator << (ostream& out, const Test& src)
{
    out << src.id << endl;
    return out;
}

int main()
{
    Test obj(1);
    cout << obj;
    cin >> obj;
    cout << obj;
}

 

C++程序设计方法2:基本语法2

标签:sam   int   赋值运算符函数   style   友元   设计   声明   div   test   

原文地址:http://www.cnblogs.com/hujianglang/p/6623999.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!