houjie-cpp面向对象

news2024/11/24 11:43:49

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 多平台发布

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java的时代依然还在,合格的Java工程师成为紧缺人才

Java的时代依然还在&#xff0c;合格的Java工程师成为紧缺人才编程语言的世界变化莫测&#xff0c;在其中浮浮沉沉28年的Java&#xff0c;也经历见证了很多语言的兴起和衰败。在最新的编程语言排行榜中&#xff0c;Java依旧位居前三&#xff0c;可见Java的发展后劲有多强&#…

BlockCanary 卡顿监测

作者&#xff1a;海象 前言 最近在处理项目中的拍摄视频后上传界面卡顿的问题,找到 BlockCanary 这个工具来定位,由于不支持高版本 Android,当时在定位卡顿时先将项目的 targetSdk 版本降下来,当然这不是个长久的办法,打算花一点时间适配下高版本,先过一遍源码流程 网上很多博…

ESP32 分区表

ESP32 分区表 1. 分区表概述 ESP32 针对 flash 进行划分&#xff0c;划分为不同的区域用作不同的功能&#xff0c;并在flash的 0x8000 位置处烧写了一张分区表用来描述分区信息。 分区表可以根据自己的需要进行配置&#xff0c;每一个分区都有其特定的作用&#xff0c;可根据…

有学生问我,重构是什么?我应该如何回答?

重构到底是什么&#xff1f;只是代码的推倒重新编码&#xff1f;还是有规则、有方法可寻&#xff1f;当然&#xff0c;结论肯定是有的&#xff0c;本文&#xff0c;我们通过一个简单的实例&#xff0c;来理解一下重构。 1.借助一个实例需求 这是一个影片出租店用的程序&#…

管理笔记2职级管理

一职级目的&#xff1a; 1 员工发展的职业通道 2 招聘、晋升的公平性 二 能力模型 类似职级 三 晋升 当前级别的事做到了&#xff0c;已经做到下一个级别的事 考虑点&#xff1a;1考虑当前阶段时间&#xff0c;不会频繁晋升&#xff0c;2考虑绩效。 不断成长、主动做事&a…

认证授权SpringSecurity

如何引入SpringSecurity作为项目的权限认证服务 1.引入依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-security</artifactId> </dependency> <dependency><groupId>org.…

客快物流大数据项目(一百一十三):注册中心 Spring Cloud Eureka

文章目录 注册中心 Spring Cloud Eureka 一、Eureka 简介 二、架构图

不得不了解的linux网络配置

目录一、查看及测试网络1.1查看网络配置1.1.1ifconfig命令—查看网络接口地址1.1.2route命令—查看路由条目1.1.3hostname命令—查看主机名称1.1.4netstat命令—查看网络连接情况1.1.5 ss命令/lsof 命令— 获取socket(套接字)统计信息1.2测试网络连接1.2.1ping命令—测试网络连…

1 Nginx跨域配置

跨域问题在之前的单体架构开发中&#xff0c;其实是比较少见的问题&#xff0c;除非是需要接入第三方SDK时&#xff0c;才需要处理此问题。但随着现在前后端分离、分布式架构的流行&#xff0c;跨域问题也成为了每个Java开发必须要懂得解决的一个问题。 跨域问题产生的原因 产…

项目管理职业发展前景怎么样?

项目管理职业发展前景怎么样&#xff1f;我们可以从这三个问题出发—— 第一个问题&#xff1a;在中国「项目管理」的专业性的体现/认同度如何&#xff1f;缺少专业知识对未来工作选择的限制程度如何&#xff1f; 由于现在有不少跨专业从业者&#xff0c;他们通过自学考证等途…

计算广告(十二)

FFM模型 FFM&#xff08;Field-aware Factorization Machine&#xff0c;领域感知因子分解机&#xff09;是一种广泛应用于推荐系统和点击率预测&#xff08;CTR&#xff09;等任务的机器学习模型。 它是基于FM&#xff08;Factorization Machine&#xff0c;因子分解机&…

nuscenes instance 调研笔记

nuscenes instance 调研笔记&#xff1a; 前言 nuscenes这个自动驾驶数据集挺大&#xff0c;官方devkit还提供了各种操作用于提高科研人员的效率&#xff0c;但是吧&#xff0c;东西多了学起来就乱七八糟的&#xff0c;本文仅以提取每个instance关联的所有images为例子&#…

USRP具有MIMO系统如何同步

MIMO系统要求 时间和频率同步&#xff0c;并且每个通道必须满足下面两个要求&#xff1a; 1&#xff09;时钟必须同步对齐 2&#xff09;对DSP操作时间也要对齐&#xff0c;来自同一的时钟边缘 波束成形和测向要求 除了采样时间和采样时钟对准外&#xff0c;系统还必须在每个…

华为OD机试 - 相同数字组成图形的周长(Java JS Python)

题目描述 有一个6464的矩阵,每个元素的默认值为0,现在向里面填充数字,相同的数字组成一个实心图形,如下图所示是矩阵的局部(空白表示填充0): 数字1组成了蓝色边框的实心图形,数字2组成了红色边框的实心图形。 单元格的边长规定为1个单位。 请根据输入,计算每个非0值…

java 数组和字符串操作

目录一、前言二、数组操作1.charAt操作2.getBytes操作3.toCharArray操作4.String.valueOf5.substring&#xff0c;toUpperCase&#xff0c;toLowerCase&#xff0c;concat6.indexOf7.Arrays使用一、前言 本文章主要讲解数组的一些基本操作&#xff0c;让我们写代码更加方便&am…

1.docker-安装及使用

1.安装步骤 Install Docker Engine on CentOS 1. 确定CenOS7及以上版本 cat /etc/redhat-release2.卸载旧版本 yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine3.yum安…

软件测试岗位求职避坑,今年毁约应届生的公司有这么多?….

不知不觉九月已至&#xff0c;“金三银四”招聘旺季也落入尾声&#xff0c;大学生也迎来毕业季&#xff01; 这个时候&#xff0c;应届生开始集体走向社会&#xff0c;而职场人也迎来了跳槽涨薪的好时机。 可现实的求职情况却是一片困境&#xff1a;从中小微到“大厂”&#…

ICPC SWERC 2020 K - Unique Activities(SAM记录子串第一次出现的位置 or SAM + hash)

两种做法的效率差异 做法一&#xff1a;SAM记录子串第一次结束位置 做法二&#xff1a;SAM hash 题意&#xff1a; 给定一个字符串&#xff0c;让你找到只出现过一次&#xff0c;且长度最短的子串并输出&#xff0c;如果有多个则输出最先出现的那个。 思路&#xff1a…

迷宫问题-DFS-BFS

迷宫问题迷宫问题简介BFS解决迷宫最短路径问题DFS记录迷宫路径DFS解决迷宫所有路径问题迷宫问题简介 &#x1f680;学习过算法程序设计的应该都学习过迷宫这个问题&#xff0c;迷宫问题主要设计的算法就是DFS-深度优先遍历和BFS-广度优先遍历。 &#x1f680;在一个二维数组中…

Jmeter和Testlink自动化测试框架研究与实施

摘 要 目前基于Jmeter的接口自动化测试框架&#xff0c;大多只实现脚本维护和自动调度&#xff0c;无法与Testlink进行互通&#xff0c;实现测试方案与自动化实施流程连接&#xff0c;本文基于Testlink、Jmeter、Jenkins实现&#xff1a;通过Testlink统一维护接口自动化测试用…