注意事项(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. BERT为什么是NLP的革新者
  2. 【Web】JavaWeb项目为什么我们要放弃jsp?为什么要前后端解耦?为什么要前后端分离?2.0版,为分布式架构打基础。 - CSDN博客
  3. LeetCode 139. 单词拆分(DP)
  4. 《Photoshop混合模式深度剖析》目录—导读
  5. 理解Spring MVC Model Attribute 和 Session Attribute
  6. vue 背景弹出禁止滚动_vue-蒙层弹窗里的内容滚动。外层大页面禁止滚动
  7. php控制梯形图,如何画梯形图? plc梯形图怎么画?如何画plc梯形图
  8. Android setTheme设置透明主题无效
  9. Web前端基础体验学习过程1 HTML篇
  10. 计算机毕业后的打算英语作文,毕业后规划英语作文
  11. 分享30个独特的 404 错误页面设计模板
  12. Node.js文档和教程
  13. “SCSA-S学习导图+”系列:文件包含
  14. 【计算机基础】03-Word习题
  15. KOA 2.0 新一代WEB开发框架-姜威-专题视频课程
  16. 字典树模板及讲解 http://www.cnblogs.com/tanky_woo/archive/2010/09/24/1833717.html
  17. 设计原则之 SOLID 原则
  18. Delphi 10.2 Tokyo 下载激活
  19. 甲乙丙三人一起进行百米赛跑(假定三人均为匀速直线运动)如果当甲到达终点时,乙距终点有5米,丙距终点还有10米,那么当乙到达终点时,丙距终点还有()米
  20. da0809 c语言程序,ADC0809做AD转换和DA转换的C程序.doc

热门文章

  1. 无器械健身锻炼全身肌肉的方法
  2. 论本我、自我、超我对人工智能的启示
  3. 线性规划问题之案例1(奶制品的生产与销售)
  4. swift subscript scraps
  5. 浅谈Web Worker和Service worker
  6. Python对excel合并单元格
  7. 软工中级实训——实训总结报告
  8. 验证本地或远程网址是否HTTP/2站点
  9. 阿里云国际版忘记会员名或登录密码,怎么办?
  10. cpu倍频模式怎么调_如何调整CPU倍频?