C++ 学习笔记

本文探讨了面向对象程序设计的核心概念,如类、对象、继承、多态性以及C++中的基本语法,包括常量指针、函数重载、虚函数和STL标准模板库的常用容器。
摘要由CSDN通过智能技术生成

1. 面向对象程序设计

  • 主要特征

     程序 = 过程设计 + 过程调用
    
  • 结构特点

      1) 程序 = 类的定义 + 类的使用
      2) 程序中的一切操作都是通过向对象发送消息来实现的,对象接收到消息后,启动有关方法完成相应的操作
    
  • 对象 = 数据 + 操作

  • 基本特征

     抽象、封装、继承、多态
    

2. C++基础——模糊点

Const 修饰符

  1. 指向常量的指针——一个指向常量的指针变量
# 可以改变指针指向的地址,但不能改变指针所指的变量
const char* pc = "abcd";
pc = 'rvfs';    √
pc[3] = 'x';    ×
  1. 常指针——将指针变量所指的地址声明为常量
# 可以修改指针所指向的内容,但不能更改指向的地址
char* const pc = "abcd";
pc[3] = 'x';    √
pc = 'dsff';    ×
  1. 指向常量的常指针
# 指针所指向的内容和地址都不可修改
const char* const pc = "abcd";

函数重载

使用条件:同一作用域下,函数参数的类型不同,或者参数的个数不同,或者二者兼而有
int add(int x, int y)
{
        return x + y;
}

double add(double x, double y)
{
        return x + y;
}

int add(int x, int y, int z)
{
        return x + y + z;
}

作用域标识符 ::

当遇到两个同名变量,一个为局部变量,一个为全局变量时,局部变量的优先级更高,会对全局变量进行覆盖

如想在局部变量的作用域中使用全局变量,可在全局变量前加 "::"

引用

引用与其所代表的变量共享同一内存单元,系统并不为引用另外分配存储空间。

即引用和其代表的变量具有相同的地址。

3. 类和对象

类的构成

1)一般情况下,一个类的数据成员应该声明为私有成员,成员函数声明为共有成员;
2)类声明中的关键字private、protected、public可以任意顺序出现。如果一个类体中没有访问权限关键字,则其中的数据成员和成员函数都默认为私有的。
3)不能在类声明中给数据成员赋初值
class 类名{
    public:        # 公共
        公有数据成员;
        公有成员函数;
    protected:     # 保护
        保护数据成员;
        保护成员函数;
    private:       # 私有,只能被类中的成员函数访问,不能在类的外部,通过类的对象进行访问
        私有数据成员;
        私有成员函数;
};

成员函数定义

返回值类型 类名::成员函数名(参数表){    函数体}
声明方式可分为隐式(成员函数直接在类内部进行定义)和显式(类声明中只给出成员函数原型,将定义放在类的外部)。

此外,在使用inline定义内联函数时,必须将类的声明和内联成员函数的定义都放在同一个(头)文件中。

共享数据的保护

常引用,所引用的对象不能更新
const 类型& 引用名
常对象:数据成员为常量,且必须有初值
类名 const 对象名[(参数表)]
常对象成员
1. 常数据成员:构造函数就只能通过成员初始化列表对该数据成员进行初始化,而任何其他函数都不能对该成员赋值
2. 常成员函数:声明函数和定义函数时都要有关键字const。在调用时不必加const

4. 继承与派生

派生类是基类的具体化,而基类则是派生类的抽象

派生类对基类成员的访问

1. 内部访问:派生类中新增的成员函数对基类继承来的成员进行访问
2. 外部访问:通过派生类的对象对基类继承来的成员进行访问

派生类和基类的调用顺序

1. 构造函数的调用:先调用基类的构造函数,后调用派生类的构造函数的顺序执行。
2. 析构函数的调用:先调用派生类的析构函数,后调用基类的析构函数。

5. 多态性与虚函数

多态

  1. 编译时多态性的实现
函数重载和运算符重载(静态连编)
  1. 运行时多态性的实现
虚函数(动态连编)

虚函数

格式

virtual 返回类型 函数名(形参表) {
    函数体
}

虚析构函数

 virtual ~类名(){
    ·····
}

纯虚函数

作用:在基类中为其派生类保留一个函数的名字,以便派生类根据需要重新定义。
virtual 函数类型 函数名(参数表) = 0;

6. 函数模板与类模板

类模板

类模板体外定义的成员函数一般形式

template <typename 类型参数>
函数类型 类名<类型参数>::成员函数名(形参表)
{
    ·····
}

7. STL标准模板库

vector

  • 功能与数组类似,但数据在堆上进行存储,且可以进行动态扩展,增加长度

     注:动态扩展,并不是在原空间之后续接新空间,而是找到比原来更大的内存空间,将原数据拷贝到新空间,释放原空间
    
  • 容器的容量存在一定的随机性,但一定是大于等于容器的大小。

list容器

list容器实质是一个双向链表,可以高效地进行插入删除元素

stack栈

一种后进先出的元素序列,访问和删除都只能对栈顶的元素(即最后一个被加入栈的元素)进行,并且元素也只能被添加到栈顶

queue

具有先进先出的特性,只能在队的前端进行删除, 在队的后端进行插入

优先队列priority_queue

priority_queue允许用户为队列中元素设置优先级,放置元素的时候不是直接放到队尾,而是放置到比它优先级低的元素前面

priority_queue<Type,  Container,  Functional>
Type,数据类型
Container,保存数据的容器,默认Vector,可省略
Functional,元素比较方式,默认less算子,可省略

双端队列deque

由一段一段的定量连续空间构成,第一个区块朝某个方向扩展,最后一个区块朝相反方向扩展;
管理这些分段的定量连续空间,维护其整体连续的假象,并提供随机存取的接口;

set

只有一个键值,底层使用一种平衡检索二叉树——红黑树进行构造。
默认比较器less

map

将任何基本类型(包括STL容器)映射到任何基本类型(包括STL容器)。
具有对数据自动排序的功能,map内部的数据都是有序的。
默认比较器 less(>=)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值