王老师 C++ 运算符重载 转换函数 第一讲

原创 2006年06月17日 21:27:00

运算符函数:operator 运算符

运算符重载,两种方式:

a.成为成员函数

b.名字空间函数(友元函数)

不能重载的运算符有: ::, ., .*, ?:

必须重载为成员函数的运算符: [], (), ->, =

要求:

a.不能引进新运算符

b.不改变元数,优先级,结合性。

定义语法:

二元函数

值类型 operatoe◎(类型名 形参名) 函数体 // 成员函数

值类型 operatoe◎(类型名 形参名, 类型名 形参名) 函数体 // 全局函数

一元函数

值类型 operatoe◎() 函数体 // 成员函数

值类型 operatoe◎(类型名 形参名) 函数体 // 全局函数

例子程序:

#include <iostream>
using namespace std;

class com{
private:
 int real;
 int img;

public:
 com(int real = 0, int img = 0){
  this->real = real;
  this->img = img;
 }

 void com_add(com &x, com &y, com &z){
  z.real = x.real + y.real;
  z.img = x.img + y.img;
 }
 
 com operator + (com x){
  return com(this->real + x.real, this->img + x.img);
 }
 
 /*
 com operator + (com & x){
  return com(this->real + x.real, this->img + x.img);
 }
 */
 
 /*
 //warning C4172: returning address of local variable or temporary
 com & operator + (com & x){
  return com(this->real + x.real, this->img + x.img);
 }
 */

 com operator + (int x){
  return com(this->real + x, this->img);
 }

 friend com operator + (int x, com y);

 void show(){
  cout << real <<  "," << img << endl;
 }

};

com operator +(int x, com y){
 return com(x + y.real, y.img);
}

int main()
{
 com a, b(1, 2), c(2, 3);
 a = b + c;
 a.show();

 a.com_add(b, c, a);
 a.show();

 a = b + 3;
 a.show();

 a = 3 + c;
 a.show();

}

注意:com & operator + (com & x)

在类成员函数中重载运算符是不允许返回引用的,会出现“返回局部变量的地址”警告。

但是对于函数 void com_add(com &x, com &y, com &z)则可以。

王老师 C++ 运算符重载 转换函数 第三讲

 示例程序:(1)new#include #include #include using namespace std;class com{public: int real, image; com(in...
  • nomad2
  • nomad2
  • 2006年07月06日 21:09
  • 2930

王老师 C++ 运算符重载 转换函数 第二讲

1.赋值函数的重载示例程序代码如下#include "stdafx.h"#include class stack{private: int *sp, top, max; void inflate();...
  • nomad2
  • nomad2
  • 2006年06月25日 22:13
  • 2752

王老师 指针 第一讲

(1)概念:一块内存区域的地址两重含义:1.起始地址2.长度(2)定义语法:类型名 * 变量名;(3)指针运算指针表达式:一个表达式,值是指针.(4)指针做函数参数(5)返回函数的指针(6)指针数组示...
  • nomad2
  • nomad2
  • 2006年05月13日 17:28
  • 1634

王老师 结构体 第一讲

一种数据类型,由多个分量构成,共同描述一个对象.声明语法:struct 类型名{ 分量类型1 分量名1; ... 分量类型n 分量名n;};结构型变量定义: struct 结构类型名 变量名;分配内存...
  • nomad2
  • nomad2
  • 2006年05月20日 20:36
  • 1509

王老师 C++ 函数重载和模板 第一讲

1.const 示例代码:#include int main(void){ int x = 3; const int y = x; const int *p = &y; const int *c = ...
  • nomad2
  • nomad2
  • 2006年06月03日 18:47
  • 1834

【c/c++】类型转换函数(类型转换运算符重载函数)

用转换构造函数可以将一个指定类型的数据转换为类的对象。但是不能反过来将一个类的对象转换为一个其他类型的数据(例如将一个Complex类对象转换成double类型数据)。 C++提供类型转换函数(ty...
  • lzm18064126848
  • lzm18064126848
  • 2016年01月04日 18:09
  • 2804

关于C++成员函数和运算符的重载

1.为啥要重载操作符: 通过重载操作符,程序员可以针对“类”类型的操作数定义不同的操作符版本。良好的操作符定义可以使class类型的使用想内置类型一样直观简洁,使用重定义的操作符而不是命名函数使得...
  • lurendetiankong
  • lurendetiankong
  • 2016年11月10日 19:36
  • 1610

cs231n: 第一讲

介绍 挑战 方法 Loss function OptimizationStandford的cs231n这门课,我觉得真的是太棒了。把CNN的各个部分、以及目前的发展都做了详细的介绍。同时通过作业,对C...
  • c602273091
  • c602273091
  • 2017年01月08日 17:12
  • 697

【TomoEngine】 第五讲 【MOBA制作日记一】 角色

用TomoEngine制作一款MOBA是近期的一个计划,从一个简单的场景开始,逐步丰富场景内容。...
  • Nanhu2012
  • Nanhu2012
  • 2016年10月20日 20:46
  • 273

java第一讲

1.jdk安装,详情请见http://jingyan.baidu.com/article/bea41d435bc695b4c41be648.html 2.数据类型:...
  • u011376865
  • u011376865
  • 2014年11月24日 11:38
  • 138
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:王老师 C++ 运算符重载 转换函数 第一讲
举报原因:
原因补充:

(最多只允许输入30个字)