当前位置: 首页 > news >正文

侯捷C++八部曲(一,面向对象)

头文件和类的声明

inline

inline修饰函数,是给编译器的一个建议,到底是否为inline由编译器来决定,inline修饰的函数在使用时是做简单的替换,这样就避免了一些函数栈空间的使用,从能提升效率。从另一种角度看,是替代宏的一种方法。

函数若在class body 内定义完成则自动成为 inline 的候选人

 构造函数放在 private 区

#include <stdio.h>
#include<stdlib.h>class A {
public: static A& getInstance();private:A();A(const A& rhs);
};A& A::getInstance()
{static A a;return a;
}

 A::getInstance();

比如像单例模式,不想让别人随意创建对象

const

const函数表示函数不会改变成员变量内容,不改变成员变量的函数一定要加。如果声明一个const的类对象,表明这个类对象里面的值不能修改,但是类成员函数没有声明成cosnt,这样就会报错。

 COW:copy on write,写时复制,在写的时候才进行复制,没写的时候,共享同一个字符串

charT
operator[] (size_type pos) const {
//不必考虑写时复制的问题,效率高,string[1]
}reference
operator[] (size_type pos){
//要考虑写时复制的问题,string[1] = 't'
}

 当成员函数的const版本和non-const版本同时存在的时候,const 对象只能调用const版本,non-const对象只能调用non-const版本

值传递和引用传递

尽量不要值传递,建议使用引用传递。引用传递底部是一个指针,一个指针四个字节。如果不希望函数修改引用的值,可以加const加以限制。函数返回值也尽量使用引用。
引用传参,传递者无需知道接收者以什么引用形式接收。

友元

一个类想要拿到另一个类的私有成员变量,那么就需要在另一个类中把这个类声明为友元。但是同一个类之间的不同实例能够取到彼此之间的私有成员变量,因为,相同class的各个对象互为友元

  • 数据放在private中
  • 参数传递使用引用
  • 返回值使用引用
  • const,应加尽加

操作符重载

  • 写成成员函数
    所有的非static成员函数都包含一个隐含的 this 指针,返回的是类引用
  • 非成员函数
    不能返回类引用,因为非成员函数操作符重载,一定会在函数方法内新建一个类对象来接收操作结果,如果返回引用,这个新对象在出了函数体之后,生命周期就结束了,引用就是失效了。所以只能返回值。

 参考文章:侯捷C++八部曲笔记(一、面向对象)_Wanncye的博客-CSDN博客

http://www.lryc.cn/news/252415.html

相关文章:

  • 《数据库系统概论》学习笔记——王珊 萨师煊
  • 关于使用百度开发者平台处理语音朗读问题排查
  • 安全认证 | CISP和CISP-PTE的区别在哪里?
  • Unity3D 导出的apk进行混淆加固、保护与优化原理(防止反编译)
  • C语言扫雷小游戏
  • 用取样思想一探AIX上进程性能瓶颈
  • 分布式搜索引擎elasticsearch(二)
  • Tecplot绘制涡结构(Q准则)
  • Whisper
  • Android系统分析
  • 五、关闭三台虚拟机的防火墙和Selinux
  • 【从零开始学习Redis | 第六篇】爆改Setnx实现分布式锁
  • Kubernetes学习笔记-Part.05 基础环境准备
  • 语义分割 DeepLab V1网络学习笔记 (附代码)
  • java设计模式学习之【建造者模式】
  • Spring Boot中的RabbitMQ死信队列魔法:从异常到延迟,一网打尽【RabbitMQ实战 一】
  • nrm : 镜像源工具npm镜像切换
  • Star 10.4k!推荐一款国产跨平台、轻量级的文本编辑器,内置代码对比功能
  • iOS 17.2:可以修改消息提示音了
  • PTA 一维数组7-3出生年(本题请你根据要求,自动填充“我出生于y年,直到x岁才遇到n个数字都不相同的年份”这句话)
  • 【3】基于多设计模式下的同步异步日志系统-设计模式
  • Metasploit的使用和配置
  • 测试用例的设计思路
  • HCIP——交换综合实验
  • 大学生如何搭建自己的网站
  • linux 路由表的优先级
  • 毕业项目分享
  • Android启动系列之进程杀手--lmkd
  • tex中的边框
  • 面试题库之JAVA基础篇(三)