C++面向对象高级编程(上)-Geekband
头文件和类声明
一定要注意使用防卫式的头文件声明:
#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的更多相关文章
- C++面向对象高级编程(八)模板
技术在于交流.沟通,转载请注明出处并保持作品的完整性. 这节课主要讲模板的使用,之前我们谈到过函数模板与类模板 (C++面向对象高级编程(四)基础篇)这里不再说明 1.成员模板 成员模板:参数为tem ...
- C++面向对象高级编程(六)转换函数与non-explicit one argument ctor
技术在于交流.沟通,转载请注明出处并保持作品的完整性. 1.conversion function 转换函数 //1.转换函数 //conversion function //只要你认为合理 你可以任 ...
- C++面向对象高级编程(五)类与类之间的关系
技术在于交流.沟通,转载请注明出处并保持作品的完整性. 本节主要介绍一下类与类之间的关系,也就是面向对象编程先介绍两个术语 Object Oriented Programming OOP面向对象编 ...
- C++面向对象高级编程(四)基础篇
技术在于交流.沟通,转载请注明出处并保持作品的完整性. 一.Static 二.模板类和模板函数 三.namespace 一.Static 静态成员是“类级别”的,也就是它和类的地位等同,而普通成员是“ ...
- C++面向对象高级编程(三)基础篇
技术在于交流.沟通,转载请注明出处并保持作品的完整性. 概要 一.拷贝构造 二.拷贝赋值 三.重写操作符 四.生命周期 本节主要介绍 Big Three 即析构函数,拷贝构造函数,赋值拷贝函数,前面主 ...
- C++面向对象高级编程(二)基础篇
技术在于交流.沟通,转载请注明出处并保持作品的完整性. 概要 知识点1.重载成员函数 知识点2 . return by value, return by reference 知识点3 重载非成员函数 ...
- Java面向对象 网络编程 上
Java面向对象 网络编程 上 知识概要: (1)网络模型 (2)网络通讯要素 (3)UDP TCP 概念 (4)Socket (5)UDP TCP 传输 ...
- C++面向对象高级编程(九)Reference与重载operator new和operator delete
摘要: 技术在于交流.沟通,转载请注明出处并保持作品的完整性. 一 Reference 引用:之前提及过,他的主要作用就是取别名,与指针很相似,实现也是基于指针. 1.引用必须有初值,且不能引用nul ...
- C++面向对象高级编程(七)point-like classes和function-like classes
技术在于交流.沟通,转载请注明出处并保持作品的完整性. 1.pointer-like class 类设计成指针那样,可以当做指针来用,指针有两个常用操作符(*和->),所以我们必须重载这两个操作 ...
随机推荐
- leetcode-240-搜索二维矩阵②
题目描述: 最佳方法:O(m+n) O(1) class Solution: def searchMatrix(self, matrix, target): if not matrix : retur ...
- leetcode-210-课程表②
题目描述: 第一次提交: class Solution: def findOrder(self, numCourses: int, prerequisites: List[List[int]]) -& ...
- 【JZOJ3424】粉刷匠
description 赫克托是一个魁梧的粉刷匠,而且非常喜欢思考= = 现在,神庙里有N根排列成一直线的石柱,从1到N标号,长老要求用油漆将这些石柱重新粉刷一遍.赫克托有K桶颜色各不相同的油漆,第i ...
- C++——运算符重载
运算符重载编程基础 例如: //全局函数 完成 +操作符 重载 Complex operator+(Complex &c1, Complex &c2) //类成员函数 完成 -操作符 ...
- DNS的解析过程
1.什么是DNS 在互联网上,唯一标识一台计算机的是IP地址,但是IP地址不方便记忆,通过一个域名对应一个IP地址,来达到找到IP地址的目的,那么DNS就是将域名转换成IP地址的过程. 2.DNS查询 ...
- 利用redis的bitmap实现用户签到功能
一.场景需求 适用场景如签到送积分.签到领取奖励等,大致需求如下: 比如签到1天送1积分,连续签到2天送2积分,3天送3积分,3天以上均送3积分等. 如果连续签到中断,则重置计数,每月初重置计数. 显 ...
- 尚学linux课程---6、linux命令介绍
尚学linux课程---6.linux命令介绍 一.总结 一句话总结: linux中命令的一般格式:命令关键字 选项 参数1 参数2 1.linux基本原则? 一切皆文件 配置文件保存为纯文本格式 2 ...
- iOS开发之SceneKit框架--SCNNode.h
1.SCNNode简介 SCNNode是场景图的结构元素,表示3D坐标空间中的位置和变换,您可以将模型,灯光,相机或其他可显示内容附加到该元素.也可以对其做动画. 2.相关API简介 初始化方法 // ...
- 分类算法之朴素贝叶斯分类(Naive Bayesian classification)
分类算法之朴素贝叶斯分类(Naive Bayesian classification) 0.写在前面的话 我个人一直很喜欢算法一类的东西,在我看来算法是人类智慧的精华,其中蕴含着无与伦比的美感.而每次 ...
- 论文阅读-(ECCV 2018) Second-order Democratic Aggregation
本文是Tsung-Yu Lin大神所作(B-CNN一作),主要是探究了一种无序的池化方法\(\gamma\) -democratic aggregators,可以最小化干扰信息或者对二阶特征的内容均等 ...