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
- 数据放在private中,绝大部分函数放在public中;
- 函数传参尽量pass by reference,考虑是否要加const;
- 函数返回值尽量return by reference;
- constructor使用initialization list;
- 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…...
数据库系统概论整理与总结
数据库系统概论 第一章:绪论 四个基本概念 四个概念 数据:Data 数据库:DataBase 数据库管理系统:DBMS 数据库系统:DBS 打个比喻,比如说菜鸟物流: Data:快递 DB:物流厂库 DBMS:对…...
打通新势力NAS权限壁垒,绿联私有云安装Portainer,实现更强大的Docker功能
打通新势力NAS权限壁垒,绿联私有云安装Portainer,实现更强大的Docker功能 对于国产新势力NAS来说,因为安全问题并没有完全开放SSH权限,所以还不能和传统NAS那样直接通过Docker run命令来部署容器,同时,对于…...
前端基础自学整理|DOM树
DOM,文档对象模型(Document Object Model),简单的说,DOM是一种理念,一种思想,一个与系统平台和编程语言无关的接口,一种方法, 使 Web开发人员可以访问HTML元素!不是具体方…...
RedisDesktopManager无法远程连接到Linux虚拟机中Redis的docker容器的一种解决方案
1.问题描述 除了RedisDesktopManager以外,使用java代码也无法连接到centos7虚拟机中的docker容器中的Redis ,按照网上其他博主的解决方案,在排除Linux防火墙问题,端口映射问题,redis.conf配置文件问题以后,…...
HarmonyOS 权限 介绍
权限说明 权限等级 根据权限对于不同等级应用有不同的开放范围,权限类型对应分为以下三种,等级依次提高。 normal权限 normal 权限允许应用访问超出默认规则外的普通系统资源。 这些系统资源的开放(包括数据和功能)对用户隐私以及…...
算法训练营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集群环境里面,只能在master节点上执行kubectl的一些命令,在其他节点上执行就会报错 # 看一下是不是 [rootnode1 ~]# kubectl get nodes E0220 12:50:15.695133 6091 memcache.go:238] couldnt get current server API gro…...
四.QT5工具安装和环境变量的配置
1.以管理员身份运行安装包 2.登录qt账号,点击【next】 3.选中同意 4.选择安装目录,注意不能有中文和空格 5.勾选 64位 mingw。点击【next】,等待安装完成 6.配置环境变量...
为什么需要MDL锁
点击上方蓝字关注我 在数据库管理中,元数据(metadata)的保护至关重要,而MySQL中的"元数据锁"(MDL锁)就是它的守护者。 1. 什么是MDL锁MDL锁,全名Metadata Lock,是MySQL中…...
nuxt项目搭建
1.先下载nuxt脚手架 yarn create nuxt-app <项目名>,记得安装完项目,npm i,下载node包 目录介绍 components 存放组件分别是头部(包含导航)和底部 layouts 页面布局,实现一个页面整体架构规则,头…...
RocketMQ消息队列(上)
什么是RocketMQ RocketMQ作为一款纯java、分布式、队列模型的开源消息中间件,支持事务消息、顺序消息、批量消息、定时消息、消息回溯等。主要功能是异步解耦和流量削峰。 常见的MQ主要有:ActiveMQ、RabbitMQ、Kafka、RocketMQ 四种MQ的对比 特性Act…...
【机器学习】机器学习是什么以及有哪些应用场景
机器学习是什么以及有哪些应用场景 一、机器学习是什么二、机器学习有哪些应用场景三、如何学习机器学习 一、机器学习是什么 机器学习(Machine Learning, ML)是一种计算机科学技术,它允许计算机系统在没有明确编程的情况下通过从数据中学习…...
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绘画工具有哪些? AI绘画工具有哪些? AI绘画工具有哪些? 截至现在,有多种AI绘画工具被广泛使用。以下是一些流行的AI画图工具和平台: 1. DeepArt - 利用神经网络将你的照片转换成类似著名画家作品的艺术作品。 2. …...
在Vue中使用TypeScript时 props指定枚举类型
推荐一款AI网站 AI写作与AI绘画智能创作平台 - 海鲸AI | 智能AI助手,可以免费领取GPT3.5无限卡 在Vue中使用TypeScript时,您可以通过定义一个枚举类型,然后在组件的props定义中使用这个枚举来指定props的类型。以下是一个如何做到这一点的例子…...
快速将excel/word表格转换为web页面(html)的方法
前言 在进行开发企业信息化建设的过程,应该有很多这样的场景,就是将现有的电子表格记录的方式转换为在数据系统中进行网页上报。也就是需要根据当前一直使用的表格制作一个上传这个表格信息的网页,如果要减少系统的使用学习成本,…...
想高薪就业鸿蒙HarmonyOS 开发岗位,到底该学习些啥?
鸿蒙是什么? 经过十多年的发展,传统移动互联网的增长红利已渐见顶。万物互联时代正在开启,应用的设备底座将从几十亿手机扩展到数百亿 IoT 设备。GSMA 预测到 2025 年,全球物联网终端连接数量将达 246 亿个,其中消费物…...
Java中的建造者模式
建造者模式(Builder Pattern)是一种创建型设计模式,用于创建复杂对象。它将对象的创建过程分离出来,使得构建过程可以独立于对象本身的表示和组成。 在Java中,建造者模式的实现通常涉及以下几个角色: Prod…...
机器学习面试:逻辑回归与朴素贝叶斯区别
逻辑回归与朴素贝叶斯区别有以下几个方面: (1)逻辑回归是判别模型,朴素贝叶斯是生成模型,所以生成和判别的所有区别它们都有。 (2)朴素贝叶斯属于贝叶斯,逻辑回归是最大似然,两种概率哲学间的区别。 (3)朴素贝叶斯需要条件独立假设…...
独立开发者如何利用Taotoken快速上线并迭代AI功能原型
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 独立开发者如何利用Taotoken快速上线并迭代AI功能原型 对于独立开发者或小型工作室而言,验证一个AI产品创意的关键在于…...
别再只用结构体了!C++17/20实战中std::tuple的5个高效替代场景(附代码)
别再只用结构体了!C17/20实战中std::tuple的5个高效替代场景(附代码) 当我们需要在C中组合多个不同类型的数据时,结构体(struct)通常是首选方案。但现代C(特别是C17/20)中的std::tuple提供了一种更灵活的选…...
AI 写作一键生成超简单,焦圈儿免费积分福利等你来领
「现在写一篇公众号推文,没三四个小时都下不来。」一位做个人 IP 的朋友跟我抱怨。问题不在于工具太少,而在于门槛太高, 要么你得自己熬夜改稿,要么你得学一堆复杂 Prompt,才能把 AI 伺候好。内容行业正在进入一个悖论…...
文献综述怎么写?研一萌新用Scholaread三天搞定开题文献综述(附100+篇文献整合方法)
开题在即,你面对电脑屏幕上50个PDF发呆,复制粘贴了20页摘要却被导师批"毫无逻辑"。问题不在于你不努力,而在于缺少系统化的文献综述工具链。本文拆解用Scholaread完成高质量文献综述的完整流程,让你从"不知道怎么开…...
SystemC随机验证环境构建:从约束生成到覆盖率驱动的自动化测试
1. 项目概述:从确定性仿真到随机验证的跨越在芯片设计和验证领域,SystemC 早已不是陌生的名字。它作为 C 的类库扩展,为系统级建模和硬件/软件协同验证提供了强大的框架。然而,很多刚接触 SystemC 验证的朋友,往往止步…...
LongWriter实战教程:从零开始构建你的专属写作AI
LongWriter实战教程:从零开始构建你的专属写作AI 【免费下载链接】LongWriter [ICLR 2025] LongWriter: Unleashing 10,000 Word Generation from Long Context LLMs 项目地址: https://gitcode.com/gh_mirrors/lo/LongWriter LongWriter是一款基于长上下文L…...
终极Axel下载加速指南:让你的文件下载速度翻倍
终极Axel下载加速指南:让你的文件下载速度翻倍 【免费下载链接】axel Lightweight CLI download accelerator 项目地址: https://gitcode.com/gh_mirrors/ax/axel Axel是一款轻量级命令行下载加速工具,通过多线程技术显著提升文件下载速度。无论你…...
ETime:高效推动你的时间
我做了一个开源时间工作台:ETime 如果你也试过很多时间管理工具,可能会遇到同一种疲惫:记录本身变成了另一件需要坚持的事。 ETime 想解决的不是“怎样把每一分钟都管起来”,而是更朴素的一件事:让开始更轻ÿ…...
别再死记硬背物联网四层架构了!用LoRa和ESP32手把手搭个智能花盆,实战理解每一层
从智能花盆实战理解物联网四层架构:LoRaESP32全流程拆解 每次翻开物联网教材,总能看到那个经典的四层架构图:感知层、网络层、平台层、应用层。但真正动手做项目时,却发现理论和实践之间隔着一道鸿沟。今天我们就用最接地气的方式…...
ArcGIS新手避坑指南:批量拼接栅格时,Mosaic和Mosaic To New Raster到底该选哪个?
ArcGIS栅格拼接工具深度对比:Mosaic与Mosaic To New Raster实战解析 当你第一次在ArcGIS的ArcToolbox中搜索栅格拼接工具时,很可能会被两个名称相似的工具搞得一头雾水——Mosaic和Mosaic To New Raster。这两个工具都位于Data Management Tools下的Rast…...
