(侯捷C++)1.1面向对象高级编程(上)

news2024/9/21 12:04:17

一.C++编程简介

1.C++历史

B语言 → C语言 → C++语言(new C → C with Class → C++)

面向对象的语言:C++、Java、C#

2.C++演化

C++ 98(1.0) → C++ 03 → C++ 11(2.0) → C++ 14

Class两个经典分类:有指针(Complex类为例),无指针(string类为例)

Complex类分析讲解:

3.头文件与类声明

  • class分类:有指针 / 无指针;C++分类:基于对象 / 面向对象
  • C++程序代码的基本形式:.h(类声明) + .cpp(主函数) + .h(标准库),延伸文件名不一定是.h或.cpp,也可能是.hpp或其他无延伸名。
  • 头文件的写法(防卫式的声明),避免重复编译,相当于# program once

  • 模板概念:不指定函数类型和形参类型不具体制定,用一个虚拟的类型来代表

4.inline函数

  • 函数在class body内定义完成,会自动成为inline候选人,是否真的成为inline由编译器决定。
  • 在类外定义inline函数需要加inline关键字。

5.构造函数

创建对象时会自动调用构造函数。

  • 构造函数的函数名与类名完全相同。
  • 构造函数可以有参数,且参数可以有默认值(默认实参),其他函数的参数也可以有默认值。
  • 构造函数不需要返回类型。
  • 可以使用初值列进行初始化,例如complex(double r = 0, double i = 0) : re(r), im(i) {}。
  • 可以在构造函数内部进行初始化,但是效率低于初始列。
  • 不带指针的类一般不需要析构函数。
  • 构造函数可以有多个,同名函数也可以有多个(C++支持函数重载)。
  • 构造函数放在private类表明该类不允许创建对象,singleton设计模式就采用了这种写法。

6.常量成员函数

在函数的后面加const关键字,例如double real() const {return re};

  • 不改变数据内容的函数叫做常量成员函数。
  • const出现在对象或者常量前面,表示该对象不允许改变。

7.参数传递 / 返回值:pass/return by value VS. pass/return by reference(引用)

  • 传引用相当于传指针(四个字节),建议尽量传引用,效率更高
  • 如果传引用,又不希望被修改,传入常引用
  • 返回值的传递也要优先考虑引用。
  • 如果返回的是在函数中新创建的对象,不能返回引用。
  • 传递着无需知道接收者是否以reference形式接收。

8.友元函数

  • 友元函数可以操作类的私有成员变量
  • 相同class的各个objects互为友元

9.操作符重载与临时对象

  • 操作符的重载可以写成成员函数以及非成员函数。
  • class body之外的各种定义:全域函数,类外定义部分。
  • 返回临时对象一定是返回value, 不可能返回引用。
  • typename()用于创建临时对象。

总结:Complex类的实现过程 -- 编程示例

  • 类声明
#program once

class complex {
public:
    complex(double r = 0, double i = 0) : re(r), im(i) {} //使用初始列
    complex& operator += (const complex&);
    double real() const {return re;}
    double imag() const {return im;}

private:
    double re, im;

    friend complex& _doapl(complex*, const complex&);
};
  • 类定义
complex& _doapl(complex* ths, const complex& r) {
    ths->re += r.re;
    ths->im += r.im;
    return *ths;
} 

inline complex& complex::operator += (const complex& r) { //在类之外,建议inline
    return _doapl(this, r);
}

inline complex opreator + (const complex& x, const complex& y) { //无需设置为成员函数
    //返回新对象,所以不能返回引用
    return complex((real(x) + real(y)), (imag(x) + imag(y))); //用类的名称加()创建临时对象
}

//复数加实数
inline complex opreator + (const complex& x, double y) { //无需设置为成员函数
    //返回新对象,所以不能返回引用
    return complex(real(x) + y, imag(x)); //用类的名称加()创建临时对象
}

//实数加复数
inline complex opreator + (double x, const complex& y) {
    //返回新对象,所以不能返回引用
    return complex(real(y) + x, imag(y));
}

//重载<<
ostream& operator << (ostream& os, const complex& x) {
    os << '(' << real(x) << ',' << imag(x) << ')';
}

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

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

相关文章

python经典例题

目录标题1&#xff0c;计算数字的阶乘2&#xff0c;区间内的所有素数3&#xff0c;求前n个数字的平方和4&#xff0c;移除列表中的多个元素5&#xff0c;列表去重6&#xff0c;对简单列表元素排序7&#xff0c;对复杂列表元素排序8&#xff0c;读取成绩问卷并排序-读取文件&…

在MySQL5基础上安装MySQL8解压版安装服务指向MySQL5的问题

Windows10在MySQL5解压版基础上安装MySQL8解压版后服务启动失败 1. 遇到的问题&#xff1a; MySQL8目录下没有生成data文件夹启动服务失败&#xff0c;右键服务属性&#xff0c;可执行文件的路径竟然是MySQL目录下的日志文件在MySQL5目录下&#xff0c;日志内容会提示读取了M…

【C语言】动态内存实现通讯录(malloc,calloc,realloc)

目录 一、为什么要存在动态内存开辟 二、动态内存函数 2.1 malloc 2.1.1 函数介绍 2.1.2 函数的使用 2.1.3 free 2.2 calloc 2.2.1 函数介绍 2.2.2 函数的使用 2.3 realloc 2.3.1 函数的介绍 2.3.2 函数的使用 三、改进通讯录 3.1 初始化 3.2 增加信息 3.3 排序&am…

R语言贝叶斯方法在生态环境领域中的高阶技术应用

贝叶斯统计已经被广泛应用到物理学、生态学、心理学、计算机、哲学等各个学术领域&#xff0c;其火爆程度已经跨越了学术圈&#xff0c;如促使其自成统计江湖一派的贝叶斯定理在热播美剧《The Big Bang Theory》中都要秀一把。贝叶斯统计学即贝叶斯学派是一门基本思想与传统基于…

从正则表达式到NFA

一、正则表达式到NFA的基本结构 1. 我们先回顾一下 RE 的三个基本操作&#xff1a; 可选&#xff08;alternative&#xff09;&#xff1a;对于给定的两个正则表达式 M 和 N&#xff0c;选择操作符&#xff08; | &#xff09;形成一个新的正则表达式 M|N &#xff0c;如果一…

28.Isaac教程--使用Sight的远程操纵杆

使用Sight的远程操纵杆 ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html 文章目录使用Sight的远程操纵杆设置 Isaac 应用程序以使用虚拟游戏手柄小部件关于虚拟游戏手柄小部件使用虚拟游戏手柄小部件运作模式手柄模式鼠标模式键盘模式控制机器人运…

设计模式_行为型模式 -《责任链模式》

设计模式_行为型模式 -《责任链模式》 笔记整理自 黑马程序员Java设计模式详解&#xff0c; 23种Java设计模式&#xff08;图解框架源码分析实战&#xff09; 概述 在现实生活中&#xff0c;常常会出现这样的事例&#xff1a;一个请求有多个对象可以处理&#xff0c;但每个对象…

windows最小化安装mysql8

第一步&#xff1a;下载 从官网下载&#xff0c;https://dev.mysql.com/downloads/mysql 第二步&#xff1a;安装 下载后解压到目录即可。 我这里解压到D:\MYSQL\mysql-8.0.32-winx64\mysql-8.0.32-winx64 第三步&#xff1a;初始化配置 1、添加系统变量 在系统变量PATH后…

【C++】从0到1入门C++编程学习笔记 - 基础入门篇:数组

文章目录一、概述二、一维数组2.1 一维数组定义方式2.2 一维数组数组名2.3 C 实现冒泡排序三、二维数组3.1 二维数组定义方式3.2 二维数组数组名3.3 二维数组应用案例一、概述 所谓数组&#xff0c;就是一个集合&#xff0c;里面存放了相同类型的数据元素 特点1&#xff1a;数…

(15)go-micro微服务main.go开发

文章目录一 导包二 配置中心三 注册中心四 zap日志初始化五 初始化Mysql数据库六 初始化Redis连接七 注册服务八 初始化服务九 注册 handle十 启动服务十一 main.go全部代码十二 最后一 导包 import (micro2 "account/common/micro""account/config/logger&quo…

day17|530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先

530.二叉搜索树的最小绝对差 给你一个二叉搜索树的根节点 root &#xff0c;返回 树中任意两不同节点值之间的最小差值 。差值是一个正数&#xff0c;其数值等于两值之差的绝对值。 示例 1&#xff1a; 输入&#xff1a;root [4,2,6,1,3] 输出&#xff1a;1 示例 2&#xff1…

Redis持久化——AOF机制详解

在运行情况下&#xff0c;Redis 以数据结构的形式将数据维持在内存中&#xff0c;为了让这些数据在 Redis 重启之后仍然可用&#xff0c;需要将数据写入持久存储 持久化是指将数据写入持久存储&#xff0c;例如固态磁盘(SSD) Redis 提供了一系列持久化选项。这些包括&#xff1…

[GYCTF2020]Blacklist(堆叠注入)

目录 信息收集 堆叠注入 payload 总结 信息收集 观察url变化是get请求的SQL注入题目 判断注入类型 1和1"回显一样 1回显报错 1 or 11# array(2) {[0]>string(1) "1"[1]>string(7) "hahahah" }array(2) {[0]>string(1) "2"[…

【C语言进阶】最常用的库函数大全——从入门到精通

目录 一.字符串函数 1.strlen——求字符串长度 2.长度不受限制的字符串函数 a.strcpy——字符串拷贝 b.strcat——追加字符串 c.strcmp——字符串比较 3.长度受限制的字符串函数——strncpy,strncat,strncmp 4.字符串查找 a.strstr——判断是否为子字符串 b.strtok—…

Java网络编程(2)

关于网络编程上一章内容&#xff0c;可以参考&#xff1a; https://blog.csdn.net/Raine_Yang/article/details/128697335?spm1001.2014.3001.5501 使用服务器处理多个客户端 一般来说&#xff0c;同一服务器要持续运行处理多个客户端的请求。我们可以为每一个客户端请求分配…

@Scope 用法

参考&#xff1a;Scope注解 详细讲解及示例 官方文档 When used as a type-level annotation in conjunction with Component, Scope indicates the name of a scope to use for instances of the annotated type. When used as a method-level annotation in conjunction w…

【NI Multisim 14.0虚拟仪器设计——放置虚拟仪器仪表(示波器)】

目录 序言 &#x1f34d;放置虚拟仪器仪表 &#x1f349;示波器 &#x1f34a;&#x1f34a;1.“时基”选项组 &#xff08;1&#xff09;标度 &#xff08;2&#xff09;X轴位移 &#xff08;3&#xff09;显示方式选择 &#x1f34a;&#x1f34a;2.“通道”选项组 …

函数指针与回调函数详解

目录1.函数指针2.函数指针数组3.指向函数指针数组的指针4.回调函数1.函数指针 前面我们学的&#xff1a; 整形指针是指向整形的指针字符指针是指向字符的指针数组指针是指向数组的指针 所以函数指针就是指向函数的指针 假如有一个int类型变量a&#xff0c;要取它的地址就是…

【Linux】Linux软件包管理器与Linux编辑器

文章目录&#x1f3aa; Linux软件包管理器&#x1f680; 1.yum基本介绍&#x1f680; 2.yum基本命令&#x1f680; 3.关于rzsz工具的安装与使用⭐3.1 rzsz工具介绍⭐3.2 rzsz工具安装⭐3.3 rzsz工具使用&#x1f3aa; Linux编辑器&#x1f680; 1.vim常用三种模式&#x1f680;…

事务管理-spring

什么是事务 - 事务是由N步数据库操作序列组成的逻辑执行单元&#xff0c;这系列操作要么全执行&#xff0c;要么全放弃执行。 • 事务的特性&#xff08;ACID&#xff09; - 原子性&#xff08;Atomicity&#xff09;&#xff1a;事务是应用中不可再分的最小执行体。 - 一致…