C++实训 面向对象 - 运算符重载与友元函数
第一关
#include <iostream>
using namespace std;/********* Begin *********/class Complex
{//复数类的声明
public:float real;float image;Complex(float r,float i){real=r;image=i;}void Print(){if(image<0){cout<<real<<image<<'i'<<endl;}else{cout<<real<<'+'<<image<<'i'<<endl;}} };
//复数类的定义
Complex operator+ (Complex& t1,Complex& t2){Complex t(0,0);t.real=t1.real+t2.real;t.image=t1.image+t2.image;return t;} Complex operator-(Complex& t1,Complex& t2){Complex t(0,0);t.real=t1.real-t2.real;t.image=t1.image-t2.image;return t;} Complex operator*(Complex &t1,Complex &t2){Complex t(0,0);t.real=t1.real*t2.real-t1.image*t2.image;t.image=t1.image*t2.real+t1.real*t2.image;return t;} /********* End *********/
第二关
class Virus
{//病毒类的声明
public:
int Gen;
Virus(){Gen=0;
}
Virus (const Virus &v){this->Gen=v.Gen+1;
}};
//病毒类的定义以及其他内容
bool operator==(const int& g,const Virus &v){if(v.Gen==g){return true;}else{return false;}
}
第三关
#include <iostream>
#include <string>
using namespace std;/********* Begin *********/
// 前置声明 Teacher 类
class Teacher;class Student
{//学生类的声明
public:friend class Teacher;Student(int num,string nam,string se){number=num;name=nam;sex=se;}void Print(){cout<<"学生:"<<name<<",编号:"<<number<<",性别:"<<sex<<endl;}
private:int number;string name;string sex;};
//学生类的定义class Teacher
{//教师类的声明public:Teacher(const Student &t){this->number=t.number;this->name=t.name;this->sex=t.sex;}Teacher(int num,string nam,string se){number=num;name=nam;sex=se;}void Print(){cout<<"教师:"<<name<<",编号:"<<number<<",性别:"<<sex<<endl;} private:int number;string name;string sex; };
//教师类的定义
第四关
注意矩阵计算的一些知识,特别是乘法
#include <iostream>
#include <string>
using namespace std;/********* Begin *********/
class Matrix
{//矩阵类的声明public:friend Matrix operator+(Matrix& m1,Matrix &m2);friend Matrix operator-(Matrix& m1,Matrix &m2);friend Matrix operator*(Matrix& m1,Matrix &m2);Matrix(int r=0,int c=0){row=r;col=c;/*for(int i=0;i<r;i++){for(int j=0;j<c;j++){data[i][j]=0;}}*/}void Fill(int val){for(int i=0;i<row;i++){for(int j=0;j<col;j++){data[i][j]=val;}}}void Set(int r,int c,int val){data[r][c]=val;}void Print(){for(int i=0;i<row;i++){for(int j=0;j<col;j++){cout<<data[i][j]<<' ';}cout<<endl;}}private:int row;int col;int data[100][100];};
//矩阵类的定义Matrix operator+(Matrix& m1,Matrix &m2)
{//实现矩阵加法Matrix t;t.row=m1.row;t.col=m1.col;for(int i=0;i<m1.row;i++){for(int j=0;j<m1.col;j++){t.data[i][j]=m1.data[i][j]+m2.data[i][j];}}return t;}Matrix operator-(Matrix& m1,Matrix &m2)
{//实现矩阵减法Matrix t;t.row=m1.row;t.col=m1.col;for(int i=0;i<m1.row;i++){for(int j=0;j<m1.col;j++){t.data[i][j]=m1.data[i][j]-m2.data[i][j];}}return t;}Matrix operator*(Matrix& m1,Matrix &m2)
{//实现矩阵乘法Matrix t;t.row=m1.row;t.col=m2.col;for(int i=0;i<m1.row;i++){for(int j=0;j<m2.col;j++){int temp=0;for(int k=0;k<m2.row;k++){temp+=m1.data[i][k]*m2.data[k][j];}t.data[i][j]=temp;}}return t;}
C++实训 面向对象 - 运算符重载与友元函数相关推荐
- C++运算符重载(友元函数方式)
我们知道,C++中的运算符重载有两种形式:①重载为类的成员函数(见C++运算符重载(成员函数方式)),②重载为类的友元函数. 当重载友元函数时,将没有隐含的参数this指针.这样,对双目运算符,友元函 ...
- 【C++】C++类的学习(三)——运算符重载与友元函数
[fishing-pan:https://blog.csdn.net/u013921430转载请注明出处] 前言 前面的两篇博文中介绍了类的一些基本特性,今天讲一讲运算符重载和友元. 运算符重载 运算 ...
- C++学习笔记(10)运算符重载,友元函数,友元类
c++允许我们为运算符定义专门的函数,这被称为运算符重载: 运算符可以简化字符串的操作,'+',以及使用关系运算符比较字符串,[ ]运算符访问向量中的元素: 例如: #include <iost ...
- C++——运算符的重载---以成员函数方式重载---以友元函数方式重载
一.运算符的重载 1.运算符的重载 允许把标准运算符(如+ - * /等运算符)应用于自定义数据类型的对象,可以提高程序的可读性,运算符的重载本质上还是函数重载.运算符仅仅是语法上的方便,它是另一种函 ...
- C++运算符重载形式--成员函数or友元函数?
1.C++操作符重载形式-成员函数or友元函数 1.对运算符重载,需要坚持四项基本原则: 不可臆造运算符: 运算符原有操作数的个数.优先级和结合性不能改变: 操作数中至少一个是自定义类型: 保持重载运 ...
- 运算符重载为成员函数,友元函数
重载运算符是函数重载的一种, 针对类对象进行操作,重载的函数中至少有一个是类对象 int operator +(ass numone, int num){...} 重载为类的成员函数, 单目运算符重载 ...
- 【C++的探索路8】运算符重载为友元以及可变长数组程序编写
本篇文章内容首先对运算符重载为友元进行介绍,由于运算符重载这部分内容相对比较多,在结束友元的介绍后,通过一个综合性的小练习对前面的重载部分内容进行一个总结回顾. 运算符重载为友元 由前面关于友元的内容 ...
- C++运算符重载(成员函数方式)
一.运算符重载 C++中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型,也需要有类似的运算操作.如果将C++中这些现存的运算符直接作用于用户自定义的类型数据上,会得到什么样 ...
- 运算符重载的非成员函数形式
运算符重载为非成员函数的规则: 函数的形参代表依自左至右次序排列的各操作数 重载为非成员函数时 参数个数 = 原操作数个数(后置++.--除外,它们仍然为了区分前置++.--要强行加个int) 至少应 ...
最新文章
- 通配符?子字符串匹配主字符串次数_突破LeetCode,拿BAT大厂offer之《正则表达式匹配》(动态规划)...
- 雷军的“初恋”回来了
- 使用Windows Azure创建移动服务
- 优化器 - tf.keras.optimizers.SGD()【TensorFlow2入门手册】
- Spring MVC @ModelAttribute 详解
- 新东方mti百科知识pdf_20南航翻硕mti初试417上岸经验贴
- 鸿蒙OS电脑体验,华为鸿蒙OS体验抢先曝光!有多个更新版本,界面和安卓完全不同...
- Struts入门经验(二)
- php 请求值中的魔术字符串
- ERP 集成常见的类型
- IOS开发之宏的深度学习
- 利用dlib和opencv建立人脸识别数据集并进行人脸识别
- 基于MyEclipse+JSP+Mysql+Tomcat开发得塞北村镇旅游网站设计
- 学生使用腾讯云搭建个人网站
- 苹果系统升级服务器,苹果操作系统升级 正式挥别PowerPC
- 网上购物网站建设方案
- 2021春节红包活动平台大全 春节平台集卡活动汇总
- 电容的种类与用途,基本知识
- 使用Python连接阿里云盘
- 美国英文简写日期格式转换
热门文章
- STM32和GD32有什么区别?
- 踩内存是什么意思啊_草坪到底能不能踩
- OpenGL渲染STL三角网格模型
- 关于昨天听直播的一点胡想
- 80后幽默语录100条
- resttemplate返回类型_RestTemplate 详解
- 第四周总结(文件属性正则符号三剑客 )
- nacos 0.7 配置管理
- java题 答案是玫瑰花,《长腿的玫瑰》阅读练习及答案(2019年湖北省十堰市中考题)...
- cn_win_srv_2003_r2_standard_with_sp2_vl_cd1_X13-46532.iso 序列号密匙