首页 / C++ / 复数类(C++练习一)
复数类(C++练习一)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了复数类(C++练习一),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2947字,纯文字阅读大概需要5分钟。
内容图文
写一个复数类,实现基本的运算,目的熟悉封装与数据抽象。
- 类的定义
#include <iostream> #include <vector> usingnamespace std; class Complex{ friend ostream & operator << (ostream & os, const Complex &); //重载输出标识符 friend Complex operator + (const Complex&, const Complex &); friend Complex operator - (const Complex&, const Complex &); friend Complex operator * (const Complex&, const Complex &); friend Complex operator % (const Complex&, const Complex &); public: Complex() = default; Complex(int a, int b) : first(a), second(b) {}; //构造函数 Complex(const Complex&); //拷贝构造函数;参数必须是const型的 Complex & operator = (const Complex &); //拷贝赋值运算符 Complex & operator += (const Complex &); Complex & operator -= (const Complex &); Complex & operator *= (const Complex &); Complex & operator %= (const Complex &); ~Complex(){}; //析构函数private: int first = 0; int second = 0; };
- 类函数的实现
#include "complex.h"usingnamespace std; ostream & operator << (ostream &os, const Complex &item) { if (item.second > 0) os << item.first << " + " << item.second << "i"; elseif (item.second < 0) os << item.first << " - " << -item.second << "i"; else os << item.first; return os; } Complex::Complex(const Complex& rhs) { this->first = rhs.first; this->second = rhs.second; } Complex &Complex::operator= (const Complex &rhs) { this->first = rhs.first; this->second = rhs.second; return *this; } // 重载运算符 += 和 + :各自实现 Complex & Complex::operator += (const Complex & rhs) //类内的重载运算符,参数只能有一个{ this->first += rhs.first; this->second += rhs.second; return *this; } Complex operator + (const Complex &lhs, const Complex &rhs) { Complex tmp; tmp.first = lhs.first + rhs.first; tmp.second = lhs.second + rhs.second; return tmp; } // 重载运算符- 和-= : -= 用 - 来实现 Complex operator - (const Complex &lhs, const Complex &rhs) { Complex tmp; tmp.first = lhs.first - rhs.first; tmp.second = lhs.second - rhs.second; return tmp; } Complex & Complex::operator-= (const Complex &rhs) { *this = *this - rhs; return *this; } // 重载运算符 *= 和 * :* 用 *= 来实现 Complex & Complex::operator *= (const Complex &rhs) { int tmpFirst = first * rhs.first; if (second * rhs.second > 0) tmpFirst -= second * rhs.second; else tmpFirst += second * rhs.second; second = first * rhs.second + second * rhs.first; first = tmpFirst; return *this; } Complexoperator * (const Complex &lhs, const Complex &rhs) { Complex tmp=
lhs; tmp *= rhs; return tmp; }
- %和%=没有实现,和前面的应该都一样
- 在同时定义了算术运算符和相关的复合赋值运算符时,通常情况下用复合赋值来实现算术运算符
- 对于类外的重载运算符,返回的不是引用,在函数内定义的临时变量在离开时不会被系统收回,如果返回引用则会指向未开辟的区域
- 对于类内的重载运算符,会默认把第一个参数绑定到this上,所以形参永远少一个,所以对于二目的运算符,只能有一个参数
- friend只是告诉类友元,并没有声明;最好在头文件中再次单独声明一次来满足可移植性
- 在visul stdio中可以直接在其他文件中定义,自动会找到
- 如果在clang编译器中需要在头文件中声明一次,包含进去
原文:http://www.cnblogs.com/dylqt/p/4927605.html
内容总结
以上是互联网集市为您收集整理的复数类(C++练习一)全部内容,希望文章能够帮你解决复数类(C++练习一)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。