惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Cisco Talos Blog
Cisco Talos Blog
K
Kaspersky official blog
T
The Exploit Database - CXSecurity.com
NISL@THU
NISL@THU
AWS News Blog
AWS News Blog
V2EX - 技术
V2EX - 技术
Google DeepMind News
Google DeepMind News
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
S
Security @ Cisco Blogs
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Recent Commits to openclaw:main
Recent Commits to openclaw:main
J
Java Code Geeks
Microsoft Azure Blog
Microsoft Azure Blog
Attack and Defense Labs
Attack and Defense Labs
Jina AI
Jina AI
The Last Watchdog
The Last Watchdog
W
WeLiveSecurity
H
Help Net Security
V
Visual Studio Blog
宝玉的分享
宝玉的分享
C
Cybersecurity and Infrastructure Security Agency CISA
T
Threat Research - Cisco Blogs
IT之家
IT之家
Hugging Face - Blog
Hugging Face - Blog
Latest news
Latest news
T
Tor Project blog
I
Intezer
美团技术团队
GbyAI
GbyAI
T
Tailwind CSS Blog
Last Week in AI
Last Week in AI
博客园 - 三生石上(FineUI控件)
Google DeepMind News
Google DeepMind News
Scott Helme
Scott Helme
Y
Y Combinator Blog
博客园 - 司徒正美
T
Tenable Blog
O
OpenAI News
N
News and Events Feed by Topic
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
V
Vulnerabilities – Threatpost
P
Palo Alto Networks Blog
博客园 - 聂微东
酷 壳 – CoolShell
酷 壳 – CoolShell
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
Threatpost
Google Online Security Blog
Google Online Security Blog
Apple Machine Learning Research
Apple Machine Learning Research
云风的 BLOG
云风的 BLOG
Help Net Security
Help Net Security

博客园 - bobbychen

.ctor,.cctor 以及 对象的构造过程 C#中virtual 方法和abstract方法的区别 SQL循环插入批量数据 【VS.NET 调试异常】 CLR 无法从 COM 上下文 XXX 转换为 COM 上下文 XXX SQL重复记录查询 String.Format格式说明 C#数字格式化方法全面解析 HTML特殊字符 - 补遗 【Access】 LEFT OUTER JOIN 关联多表的查询语句 【转帖】C#与C Windows API数据类型对应关系 Visual Studio 进行单元测试时如何附加被测试文件的方法总结 【转帖】C# 与 C++ 数据类型对照 【.Net Compact Framework开发】 使用 Visual Studio 对移动项目进行Unit Testing的方法总结 【转帖】const 与 readonly 的区别 【转帖】解决继承窗体或用户控件时“visual继承当前被禁用,因为基类引用设备特定的组件或包含 p/invoke”问题 PowerDesigner实体模型CDM中关于建立Entity之间关系的备忘 【部署】Visual Studio 2008 打包部署.Net Framework 2.0 应用程序提示需要安装.Net Framework 3.5的解决方法 SQL 使用CONVERT函数 格式化日期 【Winform窗体控件开发】之五 实现类型转换器TypeConverterAttribute
C++之不带指针类的设计——Boolean
bobbychen · 2017-02-09 · via 博客园 - bobbychen

经典的类设计分类

  • 带指针类
  • 不带指针类

Header文件的布局

 
 #ifndef __COMPLEX__
 #define __COMPLEX__
 #include <iostream.h>
 class complex //前置申明
 class complex
 {
    ...//类声明
 }
 complex::function()...//类定义
 #endif

类声明


class complex             //class head
{                         //class body
public:
  complex (double r = 0, double i = 0): re (r), im (i) { }
  complex& operator += (const complex&);
  double real () const { return re; }  //函数在body内定义,则自动成为inline候选人
  double imag () const { return im; }
private:
  double re, im;
  friend complex& __doapl (complex *, const complex&);
};

构造函数

构造函数是类中非常重要的函数,在类创建的时候由系统自动调用


complex (double r = 0, double i = 0)//默认参数,在不传参的时候直接使用默认值
: re (r), im (i)  //初始值列表,在创建成员的时候直接赋值,比在创建之后赋值效率高
 { }
  • 构造函数可重载:重载的时候注意是否有默认参数

- 构造函数可以是private :private的时候不允许外部创建对象,这个是在singleton的时候经常用到。

常量成员函数


double real () const { return re; }

在函数名后面加const修饰符,一般情况下加const表示这个函数不会修改内部的成员变量。能加的尽量加上const。


const complex a(1,2);//由于a是const的,而类的设计者在设计real()的时候没有const,调用会报错
a.real();

参数传递和返回值传递

  • 传值
  • 传引用

值传递会发生拷贝,当传递比较大的数据时,拷贝是一件很费时间和效率的事情,所以在传值和引用之间首选传引用,但是需要考虑有些时候是不能传引用的,比如临时对象

friend(友元)

自由取得friend的private成员 相同class的各个object互为友元

操作符重载

操作符重载可以看做是特殊的函数,可以是成员函数,也可以是非成员函数如果是成员函数的话,默认第一个参数是this指针,一般不写

![](http://images2015.cnblogs.com/blog/19200/201702/19200-20170209222425166-1415087702.png)

这种情况下就不能写成是成员函数了,因为和其它类型的对象相加

![](http://images2015.cnblogs.com/blog/19200/201702/19200-20170209222435807-1040259625.png)

这种情况下,返回的是临时对象,临时对象返回值绝对是不能用引用的

重点回顾:

  • 数据Data一定放在“class body”的pirvate中
  • 参数parameters尽可能使用 pass by reference 方式传递
  • 返回值return value 尽量用 pass by reference 来传递
  • class的body主体内不做变更的参数 或 返回值 应该 const 标识符,表示不希望被修改
  • 构造函数中有一个 initialization list,要尽量去使用。与在构造函数体内部进行参数初始化赋初值效率更高

返回值在什么情况下,不能使用pass by reference?

如果函数的返回值是在函数体内部临时创建用来存放结果值(是local的),那么在函数结束时这个临时对象的生命周期就结束了【虽然仍然可以吧reference传递出来但是是错误的】。这种情况则不能使用pass by reference。