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

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

典型的实现方式:

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(), b();
cout << "a = a:";
a = a;
cout << "a = b:";
a = b;
return ;
}

流运算符重载函数的声明

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();
cout << obj;
cin >> obj;
cout << obj;
}

C++程序设计方法2:基本语法2的更多相关文章

  1. 《程序设计方法》【PDF】下载

    内容简介 <程序设计方法>主要以方法为主导,结合C语言,把程序设计方法学研究中若干成熟的理论和方法用通俗易懂的语言描述出来.<程序设计方法>还选取趣味性强.技巧性高.能够启发学 ...

  2. mooc- 基本程序设计方法week1,week2

    学习了第一单元我们几本可以写出10行左右的代码. week1:python编程之基本方法 1.从计算机到程序设计语言: 理解计算机:计算机是能够根据一组指令操作数据的机器. 功能性:可以进行数据计算 ...

  3. Entity Framework 基于方法的查询语法

      实体框架(Entity Framework )是 ADO.NET 中的一套支持开发面向数据的软件应用程序的技术. LINQ to Entities 提供语言集成查询 (LINQ) 支持,它允许开发 ...

  4. EF基于方法的查询语法

    实体框架(Entity Framework )是 ADO.NET 中的一套支持开发面向数据的软件应用程序的技术. LINQ to Entities 提供语言集成查询 (LINQ) 支持,它允许开发人员 ...

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

    初始化列表 int a[] = {1,2,3}; int a[]{1,2,3} 以上两个式子等价 int a = 3+5: int a = {3+5}; int a(3+5); int a{3+5}; ...

  6. ruby创建某些“关键字”方法别名的语法

    begin和end是ruby的关键字,但是Range中也有名称为begin和end的实例方法.现在问题来了:怎么创建它们的别名方法? 如果用class Range;alias begin_x begi ...

  7. ThinkPHP 数据库操作(三) : 查询方法、查询语法、链式操作

    查询方法 条件查询方法 where 方法 可以使用 where 方法进行 AND 条件查询: Db::table('think_user') ->where('name','like','%th ...

  8. iOS开发核心语言Objective C —— 面向对象思维、setter和getter方法及点语法

    本分享是面向有意向从事iOS开发的伙伴们.或者已经从事了iOS的开发人员.假设您对iOS开发有极高的兴趣,能够与我一起探讨iOS开发.一起学习,共同进步.假设您是零基础,建议您先翻阅我之前分享的iOS ...

  9. Jquery 模板插件 jquery.tmpl.js 的使用方法(1):基本语法,绑定,each循环,ajax获取json数据

    jquery.tmpl.js 是一个模板js  ,主要有2个方法 (1):$.template()方法,将一段script或者是Html编译为模板,例如 $.template('myTemplate' ...

随机推荐

  1. PowerDesigner逆向生成MYSQL数据库表结构总结

    由于日常数据建模经常使用PowerDesigner,使用逆向工程能更加快速的生成模型提高效率,所以总结使用如下: 1.      安装MYSQL的ODBC驱动 Connector/ODBC 5.1.1 ...

  2. 435. Non-overlapping Intervals

    Given a collection of intervals, find the minimum number of intervals you need to remove to make the ...

  3. Ncurses-窗口

    前面介绍过标准屏幕 stdscr, stdscr 只是 WINDOW 结构的一个特例. 我们可以使用函数 newwin 和 delwin 来创建和销毁窗口 WINDOW *newwin(int num ...

  4. 清北合肥day2-day5

    day2:215这一天的题目相对比较模板化t1:50看错了数据范围求n个点到给出的点哈夫曼距离的最小值我想到的是一种非常zz的做法我们二分答案,然后判断是否在这个距离内有点但是这样前缀和不是很好维护于 ...

  5. vue 常用手册

    基本使用 引入vue.js 创建Vue对象, 指定选项对象 el : 指定dom标签容器的选择器 data : 指定初始化状态属性数据的对象对象/函数(返回一个对象) 页面中 使用v-model: 实 ...

  6. IDEA设置

    一:代码提示 二:自动导入

  7. Ubuntu 硬盘分区只读,重新挂载为读写分区之后,文件依然创建出错

    原因: 分区只读,可能是windows没有正常关机,或者使用了混合休眠模式. 解决方案: sudo mount -o remount,rw /dev/sdaX 若重新挂载后,创建文件以及文件夹失败: ...

  8. 爬虫3 requests基础之 乱码编码问题

    import requests res = requests.get('http://www.quanshuwang.com') res.encoding = 'gbk' print(res.text ...

  9. Java BigDecimal详解,提供了丰富的四舍五入规则

    java.math.BigDecimal类提供用于算术,刻度操作,舍入,比较,哈希算法和格式转换操作. toString()方法提供BigDecimal的规范表示.它使用户可以完全控制舍入行为. 提供 ...

  10. node.js爬取数据并定时发送HTML邮件

    node.js是前端程序员不可不学的一个框架,我们可以通过它来爬取数据.发送邮件.存取数据等等.下面我们通过koa2框架简单的只有一个小爬虫并使用定时任务来发送小邮件! 首先我们先来看一下效果图 差不 ...