C++基础

这篇博客详细介绍了C++的基础知识,包括预处理命令如#include和#define,数据类型如整型、常量表达式,以及标准库如iostream、vector和string。讨论了逻辑运算符、位运算符、枚举、类的封装、继承、多态、动态多态的条件和运算符重载。还涵盖了构造函数、析构函数、深拷贝与浅拷贝、指针的const修饰、内存分区模型、文件操作和函数模板。最后提到了STL的概念和六大组件,以及String和Vector的特点。
摘要由CSDN通过智能技术生成

launch.json   "program": "${fileDirname}/${fileBasenameNoExtension}" ,

#include

这是一个预处理命令,在调用编译器运行时,该指令使得预处理器将include后面的<>中的文件读入程序,如同将这个文件输入到源代码中的这个位置

#define是一个预处理器宏,预处理器将进行文本替换,而不是智能替换

#include <cstdint>   使用整型数据

#include<cmatch>     使用常量和常量表达式

#include<iostream>
using namespace std;        使用#include<iostream>时,要有using namespace std;

#include<vector>     使用动态数组

#include<string>     使用字符串

#include<bitset>     使用二进制数

#define编写宏函数

assert 验证表达式(也常做函数使用)

常量:const                    const double pi=22.0/7

常量表达式:constexpr           constexpr double Getpi() {return 22.0/7}

:: 域解析运算符,作用域运算符(表明归属性)

逻辑运算符NOT(!)   AND(&&)  OR(||)

按位运算符NOT(~)   AND(&)   OR(|)   XOR(^)

移位运算符 >> << 不会旋转,左移后右边补零

enum枚举

Public 类属性和声明为公有的,有了对象就可以获取

Private 声明为私有的,只能在类的内部或其友元中访问

二分模板:

当我们将区间[l, r]划分成[l, mid]和[mid + 1, r]时,其更新操作是r = mid或者l = mid + 1,计算mid时不需要加1,即mid = (l + r)/2。

当我们将区间[l, r]划分成[l, mid - 1]和[mid, r]时,其更新操作是r = mid - 1或者l = mid,此时为了防止死循环,计算mid时需要加1,即mid = ( l + r + 1 ) /2。

*使用时根据代码进行判断,看令L=mid OR mid+1,L=mid+1,则mid=(l+r)/2.

程序=数据结构+算法

数据结构:对数据的存储方式(指数据类型)

算法:对存储好的数据进行分析的步骤,操作数据的步骤=功能函数

c++的三大特性:

1.封装:把客观的事物封装成抽象的类(将数据和方法打包在一起,加以权限的区分,达到保护并安全使用数据的目的)

意义:将属性和行为作为一个整体表现生活中的事物;将属性和行为加以权限控制

Struct和class的区别在于默认的访问权限不同:struct默认公共,class默认私有

Class类中的属性和行为统称为成员:

属性/成员属性/成员变量                     行为/成员函数/成员方法

成员变量和成员函数分开储存,非静态成员变量属于类的对象上,静态成员变量、非静态成员函数、静态成员函数不属于类的对象上

访问权限:

公共权限 public   成员 类内可以访问,类外可以访问

保护权限 protect  成员 类内可以访问,类外不可以访问

私有权限 private  成员 类内可以访问,类外不可以访问

友元friend,可访问类的私有属性,实现方法:

  1. 全局函数做友元  将全局函数加关键字friend放在类下面表示声明即可使用
  2. 类做友元   将一个类的名称加关键字friend放在另一个类下面表声明
  3. 成员函数做友元  将一个成员函数用类外表达的方式在一个类中加关键字friend

  1. 继承:表达的是类之间相关的关系,使得对象可以继承另一类对象的特征和能力(避免公用的代码重复开发,减少代码和数据冗余)

Class 子类 : 继承方式 父类    (子类/派生类;父类/基类)

继承方式有:公共继承(继承后公共的仍为公共的);保护继承(继承后公共的变为保护的);私有继承(继承后公共和保护的都变为私有的)—任何方式都不能访问私有的,只是不能访问,被继承下去了,会占有内存

访问子类同名成员,直接访问即可;访问父类同名成员,需要加作用域;当子类与父类拥有同名的成员函数,子类会隐藏父类中同名成员函数,加作用域可以访问到父类中同名函数

菱形继承(钻石继承):

两个派生类继承同一个基类;又有某个类同时继承这两个派生类——在继承之前加上关键字virtual变为虚继承,此时的基类为虚基类,vbptr:虚基类指针,会指向一个虚基类表格vbtable

  1. 多态:“一个接口,多种方法”

在不同继承关系的类对象,去调同一函数,产生了不同的行为

静态多态和动态多态:

静态多态函数地址早绑定—编译阶段确定函数地址

动态多态函数地址晚绑定—运行阶段确定函数地址

动态多态满足条件:(1)有继承关系(2)子类重写父类的虚函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值