C++基础——操作符重载

原创 2012年03月21日 22:49:03

关于操作符重载,是C++一个十分强大的功能。

本文初略介绍下,涉及到友元以及函数重载

头文件MyClass.h:

#ifndef MYCLASS_H_
#define MYCLASS_H_
#include <iostream>
#include <string>
using namespace std;
class MyClass
{
	friend ostream& operator<<(ostream& os,MyClass& c);
	friend MyClass operator*(const int& n,MyClass& c);
public:
	MyClass(int n1=1,int n2=1,int n3=1,string="NoName");
	virtual~MyClass();//虽然说virtual在此无意义,但那时建议养成好的习惯
	void Show()const;
	MyClass operator*(const int& n);
	void operator*=(const int& n);
private:
	string m_strName;//名称
	int m_nNum1;//记录数据1
	int m_nNum2;//记录数据2
	int m_nNum3;//记录数据3

};
MyClass::MyClass(int n1, int n2, int n3 , std::string )
:m_nNum1(n1),m_nNum2(n2),m_nNum3(n3)
{
	cout<<"通知:构造函数调用了"<<endl;
}
MyClass::~MyClass()
{
	cout<<"通知:调用析构函数"<<endl;
}
void MyClass::Show()const
{
	cout<<"当前对象名称为:"<<m_strName<<endl;
	cout<<"三个数据依次为:"<<endl;
	cout<<m_nNum1<<"  "<<m_nNum2<<"  "<<m_nNum3<<endl;
}
MyClass MyClass::operator *(const int& n)
{
	MyClass temp;
	temp.m_strName=this->m_strName;
	temp.m_nNum1=this->m_nNum1*n;
	temp.m_nNum2=this->m_nNum2*n;
	temp.m_nNum3=this->m_nNum3*n;
	return temp;
}
ostream& operator<<(ostream& os,MyClass& c)
{
	c.Show();
//	os<<c.m_nNum1<<endl;由于是友元,在此直接调用类私有成员也没有错误
	return os;
}
MyClass operator*(const int& n,MyClass& c)
{
	return c*n;
}
void MyClass::operator *=(const int& n)
{
	*this=(*this)*n;
}
#endif;

主函数:

// 关于重载.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include "MyClass.h"
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	//提出问题--》分析问题--》解决问题
	MyClass c;
	/*cout<<c<<endl;没用重载操作符时,报错,
	因为<<操作符不认识右边的数据c,无法格式化输出
	于是,开始重载:让<<认识MyClass类
	由于<<的左边是cout即ostream对象,重载函数不能作为类成员函数
	于是,需要用到友元,让类外的函数也能访问类成员*/
	//重载完成后,再次使用:
	cout<<c<<endl;//顺利输出
	/*接下来提出另一个问题:如果我要将MyClass类的三个int成员变量直接扩大N倍怎么办呢?
	写一个类成员函数对这些变量进行修改是一个基本的方法,但是用重载更加简单灵活
	会遇到两种形式:MyClass*N和N*MyClass
	其实只要重载一次就可以了,另外一个直接return 这一个的函数就行*/
//	c=4*c;
//	cout<<c<<endl;
	//c*=4;//直接报错,继续重载
	c*=4;
	cout<<c;
	return 0;
}


代码中的注释很清楚了,不罗嗦了

版权声明:本文为博主原创文章,未经博主允许不得转载。(博客地址:http://blog.csdn.net/mfcing)

C++操作符重载 友元基础教程

接着之前的C++基础知识,这里对C++操作符重载,友元基础教程做了一个总结,这些概念虽然很小,但是,作为一名初学者或者说以后想深入学习软件方向的人来说,必须要把基础学好。文中如果有错误的地方,还望指正...

C++基础学习笔记----第十三课(操作符重载-下)

本节主要讲使用成员函数重载操作符,包括[],=,(),->四种操作符的重载以及&&和||的问题。 类的成员函数进行操作符重载 基本概念 类的成员函数也可以进行操作符的重载。类的普通成员函数是被C...

c++超基础:操作符重载、友员函数

#include using namespace std; class Complex { private: int a; int b; public: Complex(){} ~Com...

【C++基础】----操作符重载(03)

今天我们来讨论操作符重载中比较重要的一个内容:赋值操作符的重载 由于编译期对赋值有着严格的要求和限制,因此强制 operator=() 为成员函数。 成员函数的优点在于在调用时,永远有一个隐式的thi...

C++ Primer学习笔记——$14 操作符重载、函数对象及类类型转换

题记:本系列学习笔记(C++ Primer学习笔记)主要目的是讨论一些容易被大家忽略或者容易形成错误认识的内容。只适合于有了一定的C++基础的读者(至少学完一本C++教程)。  作者: tyc611,...
  • whycold
  • whycold
  • 2011年01月19日 15:09
  • 747

C++ 面向对象(二)—— 操作符重载

C++ 实现了在类(class)之间使用语言标准操作符,而不只是在基本数据类型之间使用。例如: int a, b, c; a = b + c; 是有效操作,因为加号两边的变量都是基本数据类型。然...

c++基础学习9-c++中的操作符重载

1,c++标准库 1,c++标准库

C++ 操作符重载

  • 2013年05月30日 01:47
  • 1KB
  • 下载

【C++笔记】《C++ Primer Plus》学习笔记——操作符重载(一)

《C++ Primer Plus》学习笔记——操作符重载 操作符重载简介 C++允许将操作符重载扩展到用户定义的类型,例如,允许使用+实现两个对象“相加”。举一个具体一点的例子:两个数组的相加通...

C++操作符重载

  • 2012年11月18日 21:03
  • 1.98MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++基础——操作符重载
举报原因:
原因补充:

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