头文件和类声明

一定要注意使用防卫式的头文件声明:

#ifndef _CLASSHEAD_
#define _CLASSHEAD_
.
.
.
.
#endif

基于对象和面向对象 :

基于对象 单一Class

面向对象 多个class 之间的关系.

构造函数

inline

默认实参

initialization list 初始列 (在初始列中进行,效率更高)

构造函数重载 overloading


class complex
{
complex (double r =0, double i = 0)
: re (r) , im (i)
{}
complex()
: re(0) , im(0)
{}
private:
double re, im;
};

第二个构造函数是错误的, 因为第一组构造函数已经有初始默认值了,那么第二个就重复设定了.

例如创建对象:

complex c1;

complex c2();

此时就发现,无论是使用第一个构造函数还是第二个构造函数,都是可行的.

所以,第二个构造函数是错的.

当然我们还可以构建其他方式的构造函数.

参数传递与返回值

将构造函数放在private中.

Singleton设计模式

使得本类只有一份实例对象.

在函数后面加const是个好习惯,用于说明该函数内不改变数据

参数传递: pass by value VS pass by reference ( to const)

尽量不要pass by value

传引用其实底层就是传指针.

传引用是4字节, 如果传递是一个字符(单字节) 那还是单字节速度快一些.

传递引用为了控制安全尽量使用const关键字.

如果传递的参数使用reference但并不声明const的,那么也是会被在函数内修改的.

返回值传递: pass by value VS pass by reference ( to const)

尽量return by reference

什么时候不适用reference

1, 当该返回的参数是在函数内定义的局部变量

什么时候适用reference

其他情况全适用

操作符重载与临时对象

—-1 成员函数

+= 双目操作符调用的时候,是调用操作符左边的对象.

return by reference 语法分析

传递者无需知道接收者是以reference形式接收的

(这句话似乎很难吃透, 很值得深刻理解并记住)

—- 2 非成员函数

操作符重载也有可能是全局函数,不一定是类里面的成员函数

你无法同时在类内定义操作符重载又在全局中定义该类的同一个操作符重载

在cout<< …..这样的情况下操作符重载只能是全局操作. 因为左边为ostream的对象os

重载示例:

//实现:
ostream& operator << (ostream& os , const MyClass& my)
{
return os<<my.name<<my.address;
} //在调用上:
cout<<my;
/*
当只是为了 cout<< c1; 这样的操作, 那么函数可以这样写:
void operator << (ostream& os, const complex& x);
但为了多次操作: cout<<c1<<cout<<c2;那么久必须这样写:
ostream& operator << (ostream& os, const complex& x);
*/

总结:

大气代码:

**1,数据放在private里.

2, 数据传递尽量reference.

3, 数据返回也尽量是reference.

4, 类body中尽量使用const.

5, 构造函数尽量使用初始列

6,操作符重载也有可能是全局函数,不一定是类里面的成员函数**

C++面向对象高级编程(上)-Geekband的更多相关文章

  1. C++面向对象高级编程(八)模板

    技术在于交流.沟通,转载请注明出处并保持作品的完整性. 这节课主要讲模板的使用,之前我们谈到过函数模板与类模板 (C++面向对象高级编程(四)基础篇)这里不再说明 1.成员模板 成员模板:参数为tem ...

  2. C++面向对象高级编程(六)转换函数与non-explicit one argument ctor

    技术在于交流.沟通,转载请注明出处并保持作品的完整性. 1.conversion function 转换函数 //1.转换函数 //conversion function //只要你认为合理 你可以任 ...

  3. C++面向对象高级编程(五)类与类之间的关系

    技术在于交流.沟通,转载请注明出处并保持作品的完整性. 本节主要介绍一下类与类之间的关系,也就是面向对象编程先介绍两个术语 Object Oriented Programming   OOP面向对象编 ...

  4. C++面向对象高级编程(四)基础篇

    技术在于交流.沟通,转载请注明出处并保持作品的完整性. 一.Static 二.模板类和模板函数 三.namespace 一.Static 静态成员是“类级别”的,也就是它和类的地位等同,而普通成员是“ ...

  5. C++面向对象高级编程(三)基础篇

    技术在于交流.沟通,转载请注明出处并保持作品的完整性. 概要 一.拷贝构造 二.拷贝赋值 三.重写操作符 四.生命周期 本节主要介绍 Big Three 即析构函数,拷贝构造函数,赋值拷贝函数,前面主 ...

  6. C++面向对象高级编程(二)基础篇

    技术在于交流.沟通,转载请注明出处并保持作品的完整性. 概要 知识点1.重载成员函数 知识点2 . return by value, return by reference 知识点3 重载非成员函数 ...

  7. Java面向对象 网络编程 上

     Java面向对象 网络编程 上 知识概要:                     (1)网络模型 (2)网络通讯要素 (3)UDP TCP 概念 (4)Socket (5)UDP TCP 传输 ...

  8. C++面向对象高级编程(九)Reference与重载operator new和operator delete

    摘要: 技术在于交流.沟通,转载请注明出处并保持作品的完整性. 一 Reference 引用:之前提及过,他的主要作用就是取别名,与指针很相似,实现也是基于指针. 1.引用必须有初值,且不能引用nul ...

  9. C++面向对象高级编程(七)point-like classes和function-like classes

    技术在于交流.沟通,转载请注明出处并保持作品的完整性. 1.pointer-like class 类设计成指针那样,可以当做指针来用,指针有两个常用操作符(*和->),所以我们必须重载这两个操作 ...

随机推荐

  1. event.target.tagName

    html中 event.target.tagName 中的tagName属性他返回的就是元素标签的大写名称 例如标签他的tagName就是EM 所以用大写 记住:在 HTML 中,tagName 属性 ...

  2. openwrt_ipsec_racoon.init 分析

    racoon.init 脚本分析,基于openwrt 官方的脚本分析 #!/bin/sh /etc/rc.common # 包含了文件, 这个会继续分析 # # Copyright (C) Vital ...

  3. Connected Graph

    Connected Graph 求n个点的无向联通图数量,\(n\leq 50\). 解 直接无向联通图做状态等于是以边点做考虑,难以去重,考虑联通对立面即不联通. 不难求出n个点的总方案数为\(2^ ...

  4. mysql主从同步的键值冲突问题的解决方法

    转自https://njs375666635.iteye.com/blog/2242067 多主互备和主从复制有一些区别,因为多主中都可以对服务器有写权限,所以设计到自增长重复问题 出现的问题(多主自 ...

  5. You can tell a lot about somebody, looking him in the eye.

    You can tell a lot about somebody, looking him in the eye.注视着别人的眼睛,你能读出很多故事.

  6. Arthas 3.1.2 版本发布 | 增加 logger/heapdump/vmoption 命令

    最近偶尔有用户反馈某些 HTTP 接口出现超时问题,而 web 服务端的 Trace 监控没有出现 http 返回值为 503 等异常情况.出现这种情况一般是web容器出现问题,客户端连 Arthas ...

  7. (组合数学)不定方程的解+猜测——cf997B

    首先要求出三种等价情况 5×1+1×50=1×5+5×105×1+1×50=1×5+5×10 9×5=5×1+4×10 8×5+1×50=9×10   那么可以求出三种关于x5,x10的不可行条件 x ...

  8. 微信小程序——单选项

    对于小程序单选,官方文档已经贴出了代码,我这里也不做过多解释,只是分享给大家一个小功能 一般在单选或者多选时,都会出现“其他”这个选项,如果通过input焦点事件.失焦事件来控制,代码会很繁琐 这里可 ...

  9. 【bzoj 3489】A simple rmq problem

    题目 \(kdt\)就是数点神器 我们先扫两遍处理出每个数上一次出现的位置\(pre_i,nxt_i\),之后变成\((i,pre_i,nxt_i)\)这样一个三维空间上的点 就变成了求一个立方体的最 ...

  10. grep 查看前后几行和参数匹配

    如果在只是想匹配模式的上下几行,grep可以实现.   grep -5 'parttern' inputfile //打印匹配行的前后5行 grep -C 5 'parttern' inputfile ...