当前位置: 首页 > 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)朴素贝叶斯需要条件独立假设…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

第7篇:中间件全链路监控与 SQL 性能分析实践

7.1 章节导读 在构建数据库中间件的过程中&#xff0c;可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中&#xff0c;必须做到&#xff1a; &#x1f50d; 追踪每一条 SQL 的生命周期&#xff08;从入口到数据库执行&#xff09;&#…...

rknn toolkit2搭建和推理

安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 &#xff0c;不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源&#xff08;最常用&#xff09; conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...

es6+和css3新增的特性有哪些

一&#xff1a;ECMAScript 新特性&#xff08;ES6&#xff09; ES6 (2015) - 革命性更新 1&#xff0c;记住的方法&#xff0c;从一个方法里面用到了哪些技术 1&#xff0c;let /const块级作用域声明2&#xff0c;**默认参数**&#xff1a;函数参数可以设置默认值。3&#x…...

Monorepo架构: Nx Cloud 扩展能力与缓存加速

借助 Nx Cloud 实现项目协同与加速构建 1 &#xff09; 缓存工作原理分析 在了解了本地缓存和远程缓存之后&#xff0c;我们来探究缓存是如何工作的。以计算文件的哈希串为例&#xff0c;若后续运行任务时文件哈希串未变&#xff0c;系统会直接使用对应的输出和制品文件。 2 …...