(运算符重载和类转换的练习代码)
头文件:
//MyClass.h
#pragma once
#include
//设计一个简单的类来熟悉运算符重载与类的转换
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::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::istream &is, MyClass &myc)
{
is >> myc.num;
return is;
}
MyClass::~MyClass()
{
}
使用:
//user.cpp
//!时间:2017年9月10日(周日)夜
//!内容:运算符重载与类的转换
//!最后更新时间:NULL
#include
#include //rand()
#include //time()
//和""表示编译器在搜索头文件时的顺序不同,
//表示从系统目录下开始搜索,再到PATH环境变量目录,不搜索当前目录,
//""是表示从当前目录开始搜索,然后是系统目录和PATH环境变量目录。
#include "MyClass.h"
int main()
{
using namespace std;
/*//插曲:产生随机数
srand((unsigned)time(nullptr));//种子默认为1
for (int i = 0; i < 10; i++)
cout
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?