C++基础学习笔记:运算符重载

来源:互联网 发布:svm算法 编辑:程序博客网 时间:2024/06/16 19:09

(运算符重载和类转换的练习代码)

头文件:

//MyClass.h#pragma once#include <iostream>//设计一个简单的类来熟悉运算符重载与类的转换class MyClass{private:int num;//私有成员变量public://构造函数:对象的初始化操作//只接受一个参数的构造定义了参数类型到类类型的转换,//默认为隐式转换,通过explicit关键字限制为显式转换。explicit MyClass(int n=0);//拷贝构造:形如MyClass a(b),其中b是一个MyClass类型MyClass(MyClass &myc);//赋值运算符:只能为成员函数,对象之间的赋值操作MyClass &operator=(MyClass &myc);int Add(int n);int Add(MyClass &myc);//成员函数进行运算符重载,使用关键字operator加上一个运算符,//a+n如同a.operator+(n),自身通过this指针操作。int operator+(int n);//转换函数:必须是类方法、无参数与返回值。explicit operator int() const;//友元函数进行运算符重载friend int operator+(MyClass &a,MyClass &b);//输入输出流的重载,记得返回一个流引用,方便连续的输入输出操作。friend std::ostream & operator << (std::ostream &os, MyClass &myc);friend std::istream & operator >> (std::istream &is, MyClass &myc);//析构函数~MyClass();};

类实现:

//MyClass.cpp#include "MyClass.h"MyClass::MyClass(int n){num = n;}MyClass::MyClass(MyClass &myc){num = myc.num;}MyClass & MyClass::operator=(MyClass &myc){if (this == &myc)return *this;num = myc.num;return *this;}int MyClass::Add(int n){num += n;return num;}int MyClass::Add(MyClass &myc){num += myc.num;return num;}int MyClass::operator+(int n){return num + n;}MyClass::operator int() const{return num;}int operator+(MyClass &a, MyClass &b){return a.num + b.num;}std::ostream & operator << (std::ostream &os, MyClass &myc){os << myc.num;return os;}std::istream & operator >> (std::istream &is, MyClass &myc){is >> myc.num;return is;}MyClass::~MyClass(){}

使用:

//user.cpp//!时间:2017年9月10日(周日)夜//!内容:运算符重载与类的转换//!最后更新时间:NULL#include <iostream>#include <cstdlib>//rand()#include <ctime>//time()//<>和""表示编译器在搜索头文件时的顺序不同,//<>表示从系统目录下开始搜索,再到PATH环境变量目录,不搜索当前目录,//""是表示从当前目录开始搜索,然后是系统目录和PATH环境变量目录。#include "MyClass.h"int main(){using namespace std;/*//插曲:产生随机数srand((unsigned)time(nullptr));//种子默认为1for (int i = 0; i < 10; i++)cout << rand() %10<< '-' << endl;*///MyClass a, b;a.Add(5);b = a;//赋值操作MyClass c(a);//拷贝构造a = (MyClass)2;//因为使用了explicit关键字,需要显式转换int i = (int)a;//因为使用了explicit关键字,需要显式转换i = a + b;//使用友元版本+i = a + 1;//使用成员版本+cin >> b;cout << i << a << b << c << endl;system("pause");return 0;}



原创粉丝点击