第6周项目6--复数模板类-友元

2024-04-10 13:58
文章标签 模板 项目 友元 复数

本文主要是介绍第6周项目6--复数模板类-友元,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

/*
* Copyright (c) 2015, 烟台大学计算机学院
* All rights reserved.
* 文件名称:test.cpp
* 作    者:姜甜甜
* 完成日期:2015年 4 月 14日
* 版 本 号:v1.0
*
* 可以通过模板类的技术手段,设计Complex,使实部和虚部的类型为定义对象时指定的实际类型。
(1)要求类成员函数在类外定义。
(2)在此基础上,再实现减法、乘法和除法
*/
#include <iostream>
using namespace std;
template<class T> //数据类型
class Complex
{
public:
Complex(T x,T y):a(x),b(y) {}
Complex()
{
a=0;
b=0;
}
void display();
Complex<T>complex_add(Complex <T> &t);
Complex<T>complex_minus(Complex <T> &t);
Complex<T>complex_multiply(Complex <T> &t);
Complex<T>complex_divide(Complex <T> &t);
private:
T a;
T b;
};
template <class T>
void Complex<T>::display()
{
cout<<a;
if(b>=0)
cout<<"+";
cout<<b<<"i"<<endl;
}
template <class T>
Complex<T> Complex<T>::complex_add(Complex <T> &t)
{
Complex <T>f;
f.a=a+t.a;
f.b=b+t.b;
return f;
}
template <class T>
Complex<T> Complex<T>::complex_minus(Complex <T> &t)
{
Complex <T>f;
f.a=a-t.a;
f.b=b-t.b;
return f;
}
template <class T>
Complex<T> Complex<T>::complex_multiply(Complex <T> &t)
{
Complex <T>f;
f.a=a*t.a-b*t.b;
f.b=a*t.b+b*t.a;
return f;
}
template <class T>  //复数相除:(a+bi)/(c+di)=(ac+bd)/(c^2+d^2) +(bc-ad)/(c^2+d^2)i
Complex<T> Complex<T>::complex_divide(Complex <T> &t)
{
Complex <T>f;
f.a=(a*t.a+b*t.b)/((t.a*t.a)+(t.b*t.b));
f.b=(b*t.a-a*t.b)/((t.a*t.a)+(t.b*t.b));
return f;
}
int main( )
{
Complex<int> c1(3,4),c2(5,-10),c3;   //实部和虚部是int型
c3=c1.complex_add(c2);
cout<<"c1+c2=";
c3.display( );
Complex<double> c4(3.1,4.4),c5(5.34,-10.21),c6; //实部和虚部是double型
c6=c4.complex_add(c5);
cout<<"c4+c5=";
c6.display( );
c3=c1.complex_minus(c2);
cout<<"c1-c2=";
c3.display();
c3=c1.complex_multiply(c2);
cout<<"c1*c2=";
c3.display();
c3=c1.complex_divide(c2);
cout<<"c1/c2=";
c3.display();
return 0;
}


增加友元函数的使用

#include <iostream>
using namespace std;
template<class T> //<span style="color:#ff0000;">类声明前加模板的声明  </span> 
class Complex
{
public:
Complex(T x,T y):a(x),b(y) {}  <span style="color:#ff0000;">//类声明中的每一个T,将被对象定义时提供的实际类型代替 </span>  
Complex()
{
a=0;
b=0;
}
void display();
Complex complex_add(Complex &t);
template<class T1>  <span style="color:#990000;"> //要重新定义
</span>    friend Complex <T1>add_complex(Complex <T1> &,Complex <T1> &);
private:
T a;
T b;
};
template <class T>  <span style="color:#cc0000;">//每一个成员函数的定义前,必须要声明类模板 
</span>void Complex<T>::display()   <span style="color:#cc0000;">//使用了模板的类,将不再独立使用,其类名的完整表示为“类模板名<虚拟类型参数>”   
</span>{
cout<<a;
if(b>=0)
cout<<"+";
cout<<b<<"i"<<endl;
}
template <class T>
Complex<T> Complex<T>::complex_add(Complex <T> &t)
{
Complex <T>f;
f.a=a+t.a;
f.b=b+t.b;
return f;
}
template <class T1>
Complex<T1> add_complex(Complex<T1> &t1,Complex<T1> &t2)
{
Complex<T1> f;
f.a=t1.a+t2.a;
f.b=t1.b+t2.b;
return f;
}
int main( )
{
Complex<int> c1(3,4),c2(5,-10),c3;
c3=c1.complex_add(c2);  //调用成员函数支持加法运算,有一个形参
cout<<"c1+c2=";
c3.display( );
Complex<double> c4(3.1,4.4),c5(5.34,-10.21),c6;
c6=c4.complex_add(c5);  //调用成员函数支持加法运算,有一个形参
cout<<"c4+c5=";
c6.display( );
Complex<int> c7;
c7=add_complex(c1,c2);  //调用友员函数支持加法运算,有两个形参
cout<<"c1+c2=";
c7.display( );
Complex<double> c8;
c8=add_complex(c4,c5);  //调用友员函数支持加法运算,有两个形参
cout<<"c4+c5=";
c8.display( );
return 0;
}



 

这篇关于第6周项目6--复数模板类-友元的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/891258

相关文章

SpringBoot项目中报错The field screenShot exceeds its maximum permitted size of 1048576 bytes.的问题及解决

《SpringBoot项目中报错ThefieldscreenShotexceedsitsmaximumpermittedsizeof1048576bytes.的问题及解决》这篇文章... 目录项目场景问题描述原因分析解决方案总结项目场景javascript提示:项目相关背景:项目场景:基于Spring

解决Maven项目idea找不到本地仓库jar包问题以及使用mvn install:install-file

《解决Maven项目idea找不到本地仓库jar包问题以及使用mvninstall:install-file》:本文主要介绍解决Maven项目idea找不到本地仓库jar包问题以及使用mvnin... 目录Maven项目idea找不到本地仓库jar包以及使用mvn install:install-file基

springboot项目如何开启https服务

《springboot项目如何开启https服务》:本文主要介绍springboot项目如何开启https服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录springboot项目开启https服务1. 生成SSL证书密钥库使用keytool生成自签名证书将

将Java项目提交到云服务器的流程步骤

《将Java项目提交到云服务器的流程步骤》所谓将项目提交到云服务器即将你的项目打成一个jar包然后提交到云服务器即可,因此我们需要准备服务器环境为:Linux+JDK+MariDB(MySQL)+Gi... 目录1. 安装 jdk1.1 查看 jdk 版本1.2 下载 jdk2. 安装 mariadb(my

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

《Node.js数据库CRUD项目示例详解(完美解决方案)》:本文主要介绍Node.js数据库CRUD项目示例详解(完美解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考... 目录项目结构1. 初始化项目2. 配置数据库连接 (config/db.js)3. 创建模型 (models/

springboot项目中常用的工具类和api详解

《springboot项目中常用的工具类和api详解》在SpringBoot项目中,开发者通常会依赖一些工具类和API来简化开发、提高效率,以下是一些常用的工具类及其典型应用场景,涵盖Spring原生... 目录1. Spring Framework 自带工具类(1) StringUtils(2) Coll

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.

一文教你如何将maven项目转成web项目

《一文教你如何将maven项目转成web项目》在软件开发过程中,有时我们需要将一个普通的Maven项目转换为Web项目,以便能够部署到Web容器中运行,本文将详细介绍如何通过简单的步骤完成这一转换过程... 目录准备工作步骤一:修改​​pom.XML​​1.1 添加​​packaging​​标签1.2 添加