当前位置: 首页 > news >正文

class complex

class complex from C++_OOP_base1_houjie

complex.h

#ifndef __COMPLEX__ // 防卫式声明 guard; 名称自定义
#define __COMPLEX__// 0. forward declarations
class complex;complex& __doapl (complex* ths, const complex& r);// 1. class declarations
class complex // class head
{
public: // access level// constructor (ctor): the name same with the class name; automatically called;// ctor without return typecomplex (double r = 0, double i = 0) // default argument: re (r), im (i) // initialization list 初始化要早于{}内赋值{ } // no return; {}内还可做其他事情,此处无需;// operator overloading of member function (has this pointer)complex& operator += (const complex&);// const member functiondouble real () const { return re; } // inline funcdouble imag () const { return im; }
private: // visible within classdouble re, im; // datafriend complex& __doapl (complex*, const complex&);
};// 2. class definition
// 2.1 global function
inline double real (const complex& x)
{return x.real();
}inline double imag (const complex& x)
{return x.imag();
}// operator overloading of non member function, 因为复数不仅仅只能够加复数 ,所以设置为global func而非member func
// return by value, becase the return is a local object (typename () is a temp object 临时对象, e.g., complex (...))
inline complex operator + (const complex& x, const complex& y)
{return complex (real (x) + real (y),imag (x) + imag (y));
}inline complex operator + (const complex& x, double y) // c + 5
{return complex (real (x) + y, imag (x));
}inline complex operator + (double x, const complex& y) // 5 + c
{return complex (x + real (y), imag (y));
}inline complex operator + (const complex& x) // 正号
{return x;
}inline complex operator - (const complex& x)
{return complex (-real (x), -imag (x));
}inline bool operator == (const complex& x, const complex& y)
{return real (x) == real (y) && imag (x) == imag (y);
}inline bool operator == (const complex& x, double y)
{return real (x) == y && imag (x) == 0;
}inline bool operator == (double x, const complex& y)
{return real (y) == 0 && imag (y) == x;
}inline bool operator != (const complex& x, const complex& y)
{return real (x) != real (y) || imag (x) != imag (y);
}// ...inline complex conj (const complex& x) // 共轭
{return complex (real (x), -imag (x));
}// << 会将右边的东西作用到左边身上,比如作用到cout(标准输出流), 但cout又不 认识complex
// << 不能写成member func,只能写作global func,其他操作符都可以
// 若写作member func,那么左操作数必须是类的对象,然而<< 左边一般是cout...
#include <iostream>
// os不能是const,因为在往cout丢东西的时候,其实都在改变它的状态,所以得允 许修改
// cout的返回值仍然是ostream,所以我们设计的时候返回值是ostream,然后os又不是local的,so by reference.
std::ostream& operator << (std::ostream& os, const complex& x) // param os can be 'cout', which is a obj, and the typename is ostream
{return os << "(" << real (x) << ","<< imag (x) << ")";
}// __doapl返回指针指向的object,是传递者
// 而complex&是接收者,可以是object,也可以是reference
// 传递者是无需知道接收者以什么形式接受(value or reference)
// __doapl是friend,所以可以直接访问private中的data
inline complex& __doapl (complex* ths, const complex& r)
{ths->re += r.re;ths->im += r.im;return *ths;
}// 2.2 member function
// 任何一个member func都有一个隐藏的this pointer, 指向调用者
// 返回值是complex&是考虑到连续使用+=
inline complex& complex::operator += (const complex& r) // param this hidden here
{return __doapl (this, r);
}
#endif

complex-text.cpp

#include <iostream>
#include "complex.h"using namespace std;int main()
{complex c1(2, 1);complex c2;cout << c1 << endl;cout << c2 << endl;c2 = c1 + 5;c2 = 7 + c1;c2 = c1 + c2;c2 += c1;c2 += 3;c2 = -c1;cout << (c1 == c2) << endl;cout << (c1 != c2) << endl;cout << conj(c1) << endl;return 0;
}

keypoint

  1. 数据放在private中,绝大部分函数放在public中;
  2. 函数传参尽量pass by reference,考虑是否要加const;
  3. 函数返回值尽量return by reference;
  4. constructor使用initialization list;
  5. member function应该加const时需要加上;

相关文章:

class complex

class complex from C_OOP_base1_houjie complex.h #ifndef __COMPLEX__ // 防卫式声明 guard; 名称自定义 #define __COMPLEX__// 0. forward declarations class complex;complex& __doapl (complex* ths, const complex& r);// 1. class declarations class compl…...

数据库系统概论整理与总结

数据库系统概论 第一章&#xff1a;绪论 四个基本概念 四个概念 数据&#xff1a;Data 数据库&#xff1a;DataBase 数据库管理系统:DBMS 数据库系统:DBS 打个比喻&#xff0c;比如说菜鸟物流&#xff1a; Data&#xff1a;快递 DB&#xff1a;物流厂库 DBMS&#xff1a;对…...

打通新势力NAS权限壁垒,绿联私有云安装Portainer,实现更强大的Docker功能

打通新势力NAS权限壁垒&#xff0c;绿联私有云安装Portainer&#xff0c;实现更强大的Docker功能 对于国产新势力NAS来说&#xff0c;因为安全问题并没有完全开放SSH权限&#xff0c;所以还不能和传统NAS那样直接通过Docker run命令来部署容器&#xff0c;同时&#xff0c;对于…...

前端基础自学整理|DOM树

DOM&#xff0c;文档对象模型&#xff08;Document Object Model&#xff09;&#xff0c;简单的说&#xff0c;DOM是一种理念&#xff0c;一种思想&#xff0c;一个与系统平台和编程语言无关的接口&#xff0c;一种方法, 使 Web开发人员可以访问HTML元素&#xff01;不是具体方…...

RedisDesktopManager无法远程连接到Linux虚拟机中Redis的docker容器的一种解决方案

1.问题描述 除了RedisDesktopManager以外&#xff0c;使用java代码也无法连接到centos7虚拟机中的docker容器中的Redis &#xff0c;按照网上其他博主的解决方案&#xff0c;在排除Linux防火墙问题&#xff0c;端口映射问题&#xff0c;redis.conf配置文件问题以后&#xff0c…...

HarmonyOS 权限 介绍

权限说明 权限等级 根据权限对于不同等级应用有不同的开放范围&#xff0c;权限类型对应分为以下三种&#xff0c;等级依次提高。 normal权限 normal 权限允许应用访问超出默认规则外的普通系统资源。 这些系统资源的开放&#xff08;包括数据和功能&#xff09;对用户隐私以及…...

算法训练营day33(补),复习二叉树1

// 889. 根据前序和后序遍历构造二叉树 // 前序中左右 后序遍历左右中 func constructFromPrePost(preorder []int, postorder []int) *TreeNode { if len(preorder) 0 { return nil } root : &TreeNode{} root.Val preorder[0] //前序数组去掉root节点 preorder pre…...

k8s-权限管理

1. 身份认证 我们在目前的k8s集群环境里面&#xff0c;只能在master节点上执行kubectl的一些命令&#xff0c;在其他节点上执行就会报错 # 看一下是不是 [rootnode1 ~]# kubectl get nodes E0220 12:50:15.695133 6091 memcache.go:238] couldnt get current server API gro…...

四.QT5工具安装和环境变量的配置

1.以管理员身份运行安装包 2.登录qt账号&#xff0c;点击【next】 3.选中同意 4.选择安装目录&#xff0c;注意不能有中文和空格 5.勾选 64位 mingw。点击【next】&#xff0c;等待安装完成 6.配置环境变量...

为什么需要MDL锁

点击上方蓝字关注我 在数据库管理中&#xff0c;元数据&#xff08;metadata&#xff09;的保护至关重要&#xff0c;而MySQL中的"元数据锁"&#xff08;MDL锁&#xff09;就是它的守护者。 1. 什么是MDL锁MDL锁&#xff0c;全名Metadata Lock&#xff0c;是MySQL中…...

nuxt项目搭建

1.先下载nuxt脚手架 yarn create nuxt-app <项目名>&#xff0c;记得安装完项目&#xff0c;npm i,下载node包 目录介绍 components 存放组件分别是头部&#xff08;包含导航&#xff09;和底部 layouts 页面布局&#xff0c;实现一个页面整体架构规则&#xff0c;头…...

RocketMQ消息队列(上)

什么是RocketMQ RocketMQ作为一款纯java、分布式、队列模型的开源消息中间件&#xff0c;支持事务消息、顺序消息、批量消息、定时消息、消息回溯等。主要功能是异步解耦和流量削峰。 常见的MQ主要有&#xff1a;ActiveMQ、RabbitMQ、Kafka、RocketMQ 四种MQ的对比 特性Act…...

【机器学习】机器学习是什么以及有哪些应用场景

机器学习是什么以及有哪些应用场景 一、机器学习是什么二、机器学习有哪些应用场景三、如何学习机器学习 一、机器学习是什么 机器学习&#xff08;Machine Learning, ML&#xff09;是一种计算机科学技术&#xff0c;它允许计算机系统在没有明确编程的情况下通过从数据中学习…...

vue3 #跨组件通信

//爷爷组件中 import { provide , ref } from vue const money ref (100) //定义数据 provide( money , money ) //提供数据给孙子组件 const changeMoney ( m:number ) > { //定义函数 if (money) { money.value money.value - m } } provide(&quo…...

【AI绘画工具有哪些?】讲解

AI绘画工具有哪些&#xff1f; AI绘画工具有哪些&#xff1f; AI绘画工具有哪些&#xff1f; 截至现在&#xff0c;有多种AI绘画工具被广泛使用。以下是一些流行的AI画图工具和平台&#xff1a; 1. DeepArt - 利用神经网络将你的照片转换成类似著名画家作品的艺术作品。 2. …...

在Vue中使用TypeScript时 props指定枚举类型

推荐一款AI网站 AI写作与AI绘画智能创作平台 - 海鲸AI | 智能AI助手&#xff0c;可以免费领取GPT3.5无限卡 在Vue中使用TypeScript时&#xff0c;您可以通过定义一个枚举类型&#xff0c;然后在组件的props定义中使用这个枚举来指定props的类型。以下是一个如何做到这一点的例子…...

快速将excel/word表格转换为web页面(html)的方法

前言 在进行开发企业信息化建设的过程&#xff0c;应该有很多这样的场景&#xff0c;就是将现有的电子表格记录的方式转换为在数据系统中进行网页上报。也就是需要根据当前一直使用的表格制作一个上传这个表格信息的网页&#xff0c;如果要减少系统的使用学习成本&#xff0c;…...

想高薪就业鸿蒙HarmonyOS 开发岗位,到底该学习些啥?

鸿蒙是什么&#xff1f; 经过十多年的发展&#xff0c;传统移动互联网的增长红利已渐见顶。万物互联时代正在开启&#xff0c;应用的设备底座将从几十亿手机扩展到数百亿 IoT 设备。GSMA 预测到 2025 年&#xff0c;全球物联网终端连接数量将达 246 亿个&#xff0c;其中消费物…...

Java中的建造者模式

建造者模式&#xff08;Builder Pattern&#xff09;是一种创建型设计模式&#xff0c;用于创建复杂对象。它将对象的创建过程分离出来&#xff0c;使得构建过程可以独立于对象本身的表示和组成。 在Java中&#xff0c;建造者模式的实现通常涉及以下几个角色&#xff1a; Prod…...

机器学习面试:逻辑回归与朴素贝叶斯区别

逻辑回归与朴素贝叶斯区别有以下几个方面: (1)逻辑回归是判别模型&#xff0c;朴素贝叶斯是生成模型&#xff0c;所以生成和判别的所有区别它们都有。 (2)朴素贝叶斯属于贝叶斯&#xff0c;逻辑回归是最大似然&#xff0c;两种概率哲学间的区别。 (3)朴素贝叶斯需要条件独立假设…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

4. TypeScript 类型推断与类型组合

一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式&#xff0c;自动确定它们的类型。 这一特性减少了显式类型注解的需要&#xff0c;在保持类型安全的同时简化了代码。通过分析上下文和初始值&#xff0c;TypeSc…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

Caliper 配置文件解析:fisco-bcos.json

config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...