王老师 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/c++】类型转换函数(类型转换运算符重载函数)

用转换构造函数可以将一个指定类型的数据转换为类的对象。但是不能反过来将一个类的对象转换为一个其他类型的数据(例如将一个Complex类对象转换成double类型数据)。 C++提供类型转换函数(ty...

c++ 运算符重载和转换

  • 2016年06月05日 17:37
  • 14KB
  • 下载

C++:运算符重载、string类重写、数据类型转换、->操作符重载、virtual继承、virtual函数、typeid

1.运算符重载 谁调用了成员函数,谁就是当前对象。在C++中运算符操作就是函数。含有const或者引用成员变量时,构造函数要人为的初始化。Int i=9; cout>代码如下:istream &...

为什么C++赋值运算符重载函数不能被继承?

原文地址:http://blog.csdn.net/pbmichael/article/details/1608250 这个问题曾经困扰过我一阵子。请先看一下下面的源代码: class A1 ...

C++的6种默认函数及运算符重载

C++类和对象 我们知道C语言是面向过程的编程语言,而C++是面向对象(OPP)的编程语言。  面向对象是一种程序设计范型,也是一种程序开发的方法。而对象指的是类的实例,将对象作为程序的基本单...

C++ 重载运算符 友元函数

C++ 重载运算符 友元函数
  • jh1513
  • jh1513
  • 2016年08月17日 18:13
  • 287

c++ 类的使用 友元函数 重载运算符

#ifndef S_H_ #define S_H_ #include "iostream" class s { private: int minutes; int hours; public: ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:王老师 C++ 运算符重载 转换函数 第一讲
举报原因:
原因补充:

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