houjie-cpp面向对象

houjie 面向对象

面向对象(上)

const

在一个函数后面放const,这个只能修饰成员函数,告诉编译器这个成员函数不会改数据

alt

const还是属于函数签名的一部分。 引用计数:涉及到共享的东东,然后当某个修改的时候,使用COW(Copy on Write)

new 和 delete

接管内存分配与回收 alt

  • 重载member operator new/delete alt

  • 重载成员操作符 new[] / delete[]

alt
alt

面向对象(下)

(3) non-explicit-one-argument ctor

#include<iostream>
using namespace std;


class Fraction{

public:
    Fraction(int num, int den = 1):m_numerator(num), m_denominator(den){

    }

    Fraction operator+(const Fraction& fra){
        //todo 需要修改规则
        return Fraction(this->m_numerator+fra.m_numerator,
        this->m_denominator + fra.m_denominator);
    }

    // operator double() const{
    //     //  error: use of overloaded operator '+' is ambiguous (with operand types 'Fraction' and 'int')
    //      因为这里存在两条分支路可以编译代码
    //     return (double)(m_numerator / m_denominator);
    // }

    int get_m_numberator() const {
        return this->m_numerator;
    }   

    int get_m_denominator() const{
        return this->m_denominator;
    }

private:
    int m_numerator;
    int m_denominator;
};



inline std::ostream& operator<< (std::ostream& os, const Fraction& o){
    return os << "(" << o.get_m_numberator() << ", " << o.get_m_denominator() << ")" << endl;
}

int main(){
    Fraction f(3,5);
    Fraction d2 = f + 4;    // 这里会把4转换为Fraction(4, 1)
    cout << d2 << endl
    return 0;
}

explitcit-one-argument ctor 给Fraction 加上explicit,会要求编译器不用把4强制转换为Fraction

conversion function 转换函数 没有返回类型,返回类型就是operator double()

转换函数
转换函数

(4)pointer-like classes 智能指针

#include<iostream>
using namespace std;

template<class T>
class my_shared_ptr{

public:
    T& operator*() const{
        return *px;
    }

    T* operator->() const{
        return px;
    }

    my_shared_ptr(T* p):px(p){

    }
private:
    T* px;
    long* pn;
};

struct Foo{
  void method(void){
    cout << "call Foo.method" << endl;
  }  
};


int main(){
    my_shared_ptr<Foo> sp(new Foo);
    Foo f(*sp);
    sp->method();   // -> 函数返回一个px指针,但是->可以继续使用所以等价于 px->method()
    return 0;
}

迭代器也是智能指针

迭代器
迭代器
迭代器的两个主要函数实现
迭代器的两个主要函数实现

function-like classes 仿函数

只要看到class里面有opearator()

仿函数
仿函数
标准库中的使用
标准库中的使用

对于一个类有两种方法like:可以做得像pointer、也可以弄成function

7 class Template:类模板

类模板
类模板

8 function template,函数模板

function template
function template

9 member template,成员模板

member template
member template
类模板例子
类模板例子

10 模版特化

模版特化 alt

11 模版偏特化

alt
alt

12 模板模板参数

alt

shared_prt 和 auto_ptr alt

13 关于 C++ 标准库

把C++容器和几百个algorith 使用一遍 学习过。

alt

14 三个主题 C++ 11

  1. 数量不定的模板参数 alt

区分一个和一包, 想知道后面args有多少个参数,就需要sizeof...(args)

  1. auto

  2. range-base for

alt

15 引用

变量有三种:value、pointer、reference

int* : pointer 2 integer int& : reference 2 interger

reference 一定要有初值,指针可以变化,reference 不可以变化

alt
alt

16 复合 & 继承

面向对象——class 和 class 的关系

  1. inheritance 继承关系下的构造和析构

构造的时候由内向外、析构的时候有外向内; alt

  1. composition 复合关系下的构造和析构
alt
  1. Inheritance + composition关系下的析构和构造
alt

17 关于vptr 和 vtbl

alt

静态绑定 和 动态绑定 动态绑定是先通过指针找到vptr 在找到vtbl,在去 d 调用函数 这是一种虚机制。 指针调用,向上转型,调用虚函数

18 关于 this

模板方法模式,发现 this 的应用 alt

19 关于动态绑定

通过点语法调用函数,只是一种静态调用 alt

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/8040.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mysql的学习与巩固:一条SQL查询语句是如何执行的?

前提 我们经常说&#xff0c;看一个事儿千万不要直接陷入细节里&#xff0c;你应该先鸟瞰其全貌&#xff0c;这样能够帮助你从高维度理解问题。同样&#xff0c;对于MySQL的学习也是这样。平时我们使用数据库&#xff0c;看到的通常都是一个整体。比如&#xff0c;你有个最简单…

【Paper】2019_Resilient Consensus Through Asynchronous Event-based Communication

Wang Y, Ishii H. Resilient consensus through asynchronous event-based communication[C]//2019 American Control Conference (ACC). IEEE, 2019: 1842-1847. 文章目录I. INTRODUCTIONII. EVENT-BASED RESILIENT CONSENSUS PROBLEMA. Preliminaries on graphsB. Event-base…

基于Java+ SpringBoot+Vue 的网上图书商城管理系统(毕业设计,附源码,教程)

您好&#xff0c;我是程序员徐师兄&#xff0c;今天为大家带来的是 基于Java SpringBootVue 的网上图书商城管理系统&#xff08;毕业设计&#xff0c;附源码&#xff0c;教程&#xff09;。 &#x1f601; 1.Java 毕业设计专栏&#xff0c;毕业季咱们不慌忙&#xff0c;几百款…

电脑桌面图标间距突然变大怎么恢复

1. WindowsR打开 > 输入regedit 按住WindowsR打开运行&#xff0c;输入regedit并点击确定。 2. 双击Control Panel 双击展开HKEY_CURRENT_USER&#xff0c;双击展开Control Panel&#xff0c;双击展开Desktop。 3. 更改间距 点击打开WindowMetrics&#xff0c; 双击打开…

两年外包生涯,给我后面入职字节跳动奠定了基础.....

我是一位软件测试工程师。从大学毕业后&#xff0c;我进入了一家外包公司&#xff0c;在那里工作了两年时间。虽然我在公司中得到了不少锻炼和经验&#xff0c;但是我一直渴望能够进入一家更加专业的公司&#xff0c;接触更高端、更有挑战性的项目。 于是&#xff0c;我开始主…

Keil 4 安装教程及简单使用【嵌入式系统】

Keil 4 安装教程及简单使用【嵌入式系统】前言推荐说明Keil 4 for Arm安装教程1.安装MDK2.激活mdkkeil 4 for arm 的简单使用1建立新工程2在工程下创建新文件3.设置工程属性4.中文注释5.编辑代码6.build7.debug8. 调试窗口简介keil 4 for C51安装教程1.前期准备2.开始keil4 for…

记录-VueJs中如何使用Teleport组件

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 在DOM结构相对比较复杂,层级嵌套比较深的组件内,需要根据相对应的模块业务处理一些逻辑,该逻辑属于当前组件 但是从整个页面应用的视图上看,它在DOM中应该被渲染在整个vue应用外部的其他地方,不能影响…

[架构之路-159]-《软考-系统分析师》-10-系统分析-6-现有业务流程分析, 系统分析最核心的任务

目录 第 10章 现有系统 分 析 1 0 . 6 现有业务流程分析 10.6.1 业务流程分析槪述 1 . 业务流程分析的步骤 2 . 业务流程分析的方法 10.6.2 业务-流程图TFD 1. T F D 的基本符号 2. TFD的绘制 10.6.3 业务 - 活动图 10.6.4 业务流程建模BPM 1. B P M 概述 2 . 标杆…

计算机视觉基础__图像特征

计算机视觉基础__图像特征 本篇目录&#xff1a; 一、前言 二、位图和矢量图概念 三、图像的颜色特征 四、RGB 颜色空间 五、HSV 颜色空间 六、HLS 颜色空间 七、实例代码 八、参考资料 一、前言 传统图像处理&#xff0c;需要找出图片中的关键特征&#xff0c;然后对这…

window端口占用如何杀死进程

1、输入命令&#xff1a;netstat -ano|findstr “8099” 2、杀死命令 taskkill /PID 2980 -T -F

Python机器学习:朴素贝叶斯

前两天不知道把书放哪去了&#xff0c;就停更了一下&#xff0c;昨天晚上发现被我放在书包夹层里面了&#xff0c;所以今天继续开始学习。 首先明确一下啊&#xff0c;朴素贝叶斯是什么&#xff1a;朴素贝叶斯分类器是一种有监督的统计学过滤器&#xff0c;在垃圾邮件过滤、信…

服务 API 设计之 ——API 参数规范

【强制】字段名称用小驼峰风格 【强制】Service API 返回值必须使用 Response 包装 Service API 返回值强制要求进行通用包装&#xff0c;例如&#xff1a;Response。Response 的作用&#xff1a; 统一方法表示 API 调用是否成功API 调用失败时&#xff0c;统一格式反馈错误 C…

vue实现轨迹回放(很详细)

效果 功能 时间搜索查询轨迹并生成&#xff08;默认是当前的一天的时间&#xff09; 图标能跟随路径方向移动 删除了百度logo和版权信息&#xff08;业务需要&#xff0c;不建议删除&#xff09; Vue Baidu Map npm install vue-baidu-map --save main.js import Vue from vu…

关于h5跳转app的坑

需求&#xff1a;h5点击按钮跳转app&#xff0c;有下载app的直接打开&#xff0c;无下载就跳转下载的链接&#xff08;安卓跟ios的下载链接不一样&#xff09; 1、用超链接的方式打开app <a href"xxxx"></a> 弊端&#xff1a;这种方式只能控制有下载ap…

基于电子商务平台客户管理系统的设计与实现_kaic

摘要 本论文旨在设计和实现一个基于电子商务平台的客户关系管理系统&#xff0c;以提高企业与客户之间的互动和关系维护效率。本文首先介绍了客户关系管理系统的相关理论和技术&#xff0c;并分析了其在电子商务平台中的应用价值。接着&#xff0c;进行了电子商务平台客户关系管…

【计算机组成原理笔记】

【计算机组成原理笔记】 1.1 计算机系统简介 计算机系统由软件和硬件组成。软件又可分为系统软件和应用软件。 计算机体系结构指的是&#xff08;机器语言&#xff09;程序员所看到的计算机系统属性概念性的结构与功能特性。&#xff08;研究有无乘法指令&#xff09; 计算机…

【ROS服务通信如果先启动客户端,那么会请求异常需求,如何解决?最全】

问题: 如果在启动 ROS 服务的客户端之前启动了 ROS 服务&#xff0c;客户端可能会因为缺少服务而发出异常请求。这可能会导致服务端不知道如何处理请求&#xff0c;从而导致通信失败。要解决这个问题&#xff0c;有以下几种方法&#xff1a; 等待服务启动&#xff1a;在启动客…

C语言爱心代码大全集—会Ctrl+C就可以表白了

一、C语言爱心代码大全&#xff0c;会CtrlC就可以表白了&#xff01; 博主整理了一个C语言爱心代码大全&#xff0c;里面有C语言爱心代码会动的动态效果和C语言爱心代码大全静态效果&#xff0c;只需复制粘贴就可以用啦&#xff01; 1、动态C语言爱心代码效果图如下&#xff…

如何优雅地使用 Markdown?

程序员宝藏库&#xff1a;https://gitee.com/sharetech_lee/CS-Books-Store 要想优雅&#xff0c;首先得有一个丝滑、好用的Markdown编辑器。 我用typora做笔记三年多&#xff0c;收费之后我开始找替代品&#xff0c;尝试了很多&#xff0c;总是有这样那样的问题不满意&#x…

QT设置图标

可执行文件图标 把.ico文件放到工程目录中&#xff0c;于.pro文件同级&#xff0c;然后在.pro文件中加上 RC_ICONSxxx.ico窗口左上角图标和任务栏图标 在mainwindows的ui文件中 选择文件或选择资源。资源的话就是从QT resources中找。百度关键字QT resources。