C++基础学习笔记:运算符重载
2017-09-11 08:55
756 查看
(运算符重载和类转换的练习代码)
头文件:
类实现:
使用:
//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));//种子默认为1
for (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;
}
头文件:
//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));//种子默认为1
for (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;
}
相关文章推荐
- 嵌入式开发之C++基础学习笔记5--静态成员,友元,运算符重载,模板,文件流
- C++基础教程 学习笔记(一) C++的数据类型和修饰符
- C++基础学习笔记----第七课(面向对象的基本概念)
- c++学习笔记三-常见基础问题
- C++基础学习笔记----第十三课(操作符重载-下)
- C++学习笔记5:从方法到属性(面向对象基础)
- C++学习笔记(一)--基础知识sizeof用法
- C++基础的不能再基础的学习笔记——迭代器(基础)
- C/C++学习笔记:基础知识10
- C++学习笔记31——类的基础概念
- C++基础的不能再基础的学习笔记——顺序容器(其他操作)
- C++ 基础学习笔记(2)---函数(测试题)
- C++基础的不能再基础的学习笔记——拷贝控制(一)
- 【C++学习笔记】优先级队列以及运算符重载
- C++ Primer学习笔记1--c++基础篇查缺补漏
- C++基础学习笔记(1):C++中的操作符
- 《面向对象基础:C++实现》学习笔记之六
- C++学习笔记1--基础知识
- VS2010 C++ MFC框架学习笔记4 - C++面向对象编程基础2
- 《面向对象基础:C++实现》学习笔记之一