注意事项(class without pointer)

1、防卫式的申明,避免重复定义类
2、重载一般发生在构造函数中,构造函数可以提供默认实参,要注意成员初始化列表的使用。构造函数在对象创建的同时被调用。
3、有些函数可以在类中直接进行定义,也可以在类外进行定义,在类中进行定义的函数都为内联函数,在类外定义式在前面加上inline则也可以推荐为内联函数,但具体是不是内联还是得看编译系统。内联函数一般选择较为简单的函数(不能包含循环,switch等。)内联函数能够节省参数传递,控制转移等开销。
4、成员函数中分为会改变数据的函数和不会改变数据的函数,不会改变数据的函数立马加上const。
5、参数传递时如果通过传值的方式,一方面内容很大时会导致效率的降低,另一方面可能导致错误(不能修改调用函数中的数据对象)。参数传过去不希望对方进行修改则应该设置为const
6、返回值传递也尽量传引用,返回值不是一个local objects则可以传引用(this),注意<<重载与+=重载时的返回类型。
7、什么时候可以返回引用:不需要在函数内创建一个新的东西来返回出去,仅仅将计算后的值放在已经存在的东西上,如+=,但是相加则不行。返回的为一个local object则不能返回引用
8、所有的成员函数一定带有一个指向调用者的指针,全局函数没有this指针

代码展示

complex.h

#pragma once#include <iostream>
using namespace std;#ifndef _COMPLEX_
#define _COMPLEX_//template<typename T>//类模板
class complex
{//访问级别:public、private(数据)、protected
public://构造函数,默认实参,成员初始化列表//构造函数在对象创建的同时被调用,函数名称与类的名称相同//不带指针的类多半不用写析构函数//有可能将构造函数放在private中(singleton)单例模式complex(double r = 0, double i = 0): re(r), im(i){  }//inline函数//有些函数在此直接定义,有的函数去类外定义,若在类里面完成定义,便自动成为inline候选人//在类外定义时加上inline也可以成为inline函数的候选者//inline函数一般选择结构相对简单的函数,不能含有循环switch等。//编译时在调用处用函数体进行替换,节省了参数传递,控制转移等开销。//const//成员函数中分为会改变数据的函数与不会改变数据的函数//不会改变数据的函数立马加上const,如果没有添加const时,一旦用户定义对象时确定对象为const//就会产生类型不匹配的错误(用户定义为不能修改但是成员函数中默认可以更改,差生矛盾)double real() const { return re; }double imag() const { return im; }//参数传递//pass by value时如果内容很大时便会很慢,pass by reference相当于传指针,会很快。//参数传递尽量传引用,如果传过去不希望对方进行修改时则加const(pass by reference to const)//返回值传递//返回值传递也尽量return by referencecomplex& operator += (const complex&);//相同class的各个objects互为友元,c2能直接拿到c1的数据int func(const complex& param) const{return param.re + param.im;}
private:double re, im;//定义为友元能自由取得friend的private成员friend complex& __doapl(complex*, const complex&);
};//什么时候可以返回引用:不需要在函数内创建一个新的东西来返回出去,仅仅将计算后的值放在已经存
//在的东西上,如+=,但是相加则不行。返回的为一个local object则不能返回引用
inline complex& __doapl(complex* ths, const complex& r)
{ths->re += r.re;ths->im += r.im;return *ths;
}//所有的成员函数一定带有一个隐藏的参数this,this指向调用者
//全局函数没有this指针
//+=的返回类型不能是void(当使用者使用c1 += c2 += c3时会出现错误)
inline complex&
complex::operator += (const complex& r)
{return __doapl(this, r);
}//对<<进行重载,便能使cout以想要的格式显示出复数
ostream&
operator << (ostream& os, const complex& x)
{return os << '(' << x.real() << ',' << x.imag()<< ')' << endl;
}
//typename()创建一个临时对象#endif

complex.cpp

#include "complex.h"int main()
{complex c1(2.5, 1.5);const complex c2(3.7,2.5);cout << c1.real() << ' ' << c2.imag() << endl;cout << c2.func(c1) << endl;c1 += c2;cout << c1.real() << endl;cout << c1;return 0;
}

C++学习(complex类)相关推荐

  1. 如何学习streamdecoder类_如何学习篇5:强化2种能力——2种学习模式之运动类:隐性学习...

    [本文摘要] [注]本文所述内容为学习Yjango<学习观>相关视频之后的总结,观点归Yjango所有,本文仅作为学习之用. 阅读本节,会让你对英语这类运动类知识的学习豁然开朗,你会知道英 ...

  2. java中蛇的属性有哪些_学习Java类的属性

    学习Java类的属性-武汉北大青鸟 Public.private.protected显示了三种类中的属性和服务的类型,public是可以随意访问的.private是外界不能访问的(显示了数据的封装性) ...

  3. Complex类与运算符重载

    Complex Class Operator Overloading: 写在开篇:分文件编写的实现运算符的重载,以经典的Complex类为模板,如题~ 正文开始@Assassin 目录: Comple ...

  4. 普通话测试软件测分准吗,普通话学习测试类 | 普通话测试APP,能做到测试、学习提高两不误吗?...

    原标题:普通话学习测试类 | 普通话测试APP,能做到测试.学习提高两不误吗? 普通话是如今人们生活的常用语言,但要说到参加普通话测试,如果没有提前了解普通话测试的形式与要求,也不知道自己普通话的起步 ...

  5. 学信息安全买计算机,大学学习计算机类信息安全方向真的很蠢吗?

    大学学习计算机类信息安全方向真的很蠢吗? 本人2018届高考党,目前水平可以上一个不错的211,望借自主招生冲击985院校. 几天前,当我对老师说:"我目前最优先的选择是计算机-信息安全方向 ...

  6. java虚拟机预先加载哪些类_Java虚拟机JVM学习02 类的加载概述

    Java虚拟机JVM学习02 类的加载概述 类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对 ...

  7. Java为枚举类创建成员变量_Java学习——枚举类

    Java学习--枚举类 摘要:本文主要介绍了Java的枚举类. 部分内容来自以下博客: https://www.cnblogs.com/sister/p/4700702.html https://bl ...

  8. 2020-用多通道卷积神经网络学习单类特征用于人脸表现攻击检测

    2020年,Anjith George等人,期刊:TIFS,CCFA刊,Learning One Class Representations for Face Presentation Attack ...

  9. 游戏策划学习:类银河恶魔城、烬

    游戏策划学习:类银河恶魔城.烬 1.roguelike和银河恶魔城类游戏的区别 (1).地图复用是银河恶魔城类非常重要的一个特征.通过剧情导向和收集要素,让玩家多次探索同一个地图区域,用有限的资源延长 ...

  10. python引用类 魔法方法_Python 学习笔记 -- 类的魔法方法

    常用魔法方法 含义 __new__(cls[,...]) 1.__new__在对象被实例化时调用 2.第一个参数是类本身,其他参数传入__init__中 3.__new__如果没有返回值,则不会调用_ ...

最新文章

  1. 深度linux卡在扫描硬盘,linux使用badblocks命令扫描硬盘排除故障
  2. sbt创建play framework(play!)scala web项目
  3. linuxHacks中记载的一些小技巧
  4. MySQL5.6 更改字段属性仍旧会锁全表,注意这个坑!
  5. 使用【Linux操作系统】必须掌握的基本命令
  6. 微信公众平台消息接口开发(27)彩票查询
  7. python画折线图-python绘制简单折线图代码示例
  8. java程序员 英文简历_it程序员英文简历范文模板
  9. TCP/UDP的区别
  10. 怎么彻底关闭UAC(user account control)?
  11. ORCAD原理图检查
  12. diy服务器组装,服务器装机 DIY
  13. syntax error:unterminated quoted string
  14. 高级编程中C语言属于,c语言高级编程
  15. 美国不道德的人体实验
  16. VMware中Linux网络配置VMnet8还原默认配置不成功解决办法(亲测有效)
  17. excel 错位插入_EXCEL单元格错位如何对齐:excel表格数据错位
  18. 认认真真几个高质量人工智能方向的原创公众号
  19. 前端面试官怎么问的问题都是原理呢?
  20. 高空作业安全绳穿戴识别检测算法 YOLOv3

热门文章

  1. 33、什么是 AIO?
  2. Devfreq Bus Dcvs
  3. [转贴]杨式太极拳八十五式通释—1—王志远
  4. xmake中add_files的使用
  5. vue3中使用Web Worker多线程
  6. GDOI2018滚粗记
  7. Abstract Travel代码解析
  8. (五十七)方差分析与相关分析
  9. Python中的turtle.right()方法的用法示例
  10. 微信小程序 —— 自定义picker选择器弹窗内容