Featured image of post C++期末大复习😁

C++期末大复习😁

有同学跟我说:嘻嘻我一定不要挂科,遂为其撰写此复习模块

奇闻轶事

T0fv404   2025-06-01 22:30
怎么办C++什么都看不懂了QAQ,咕咕嘎嘎(大声)
2025-06-01 23:02   Nan0in
铸币吧课一节不上自己也不学,早干嘛了

正文

前言

首先HDU C++面向对象编程。。。怎么说呢老师该讲的确实都讲了,但是我不喜欢课程的节奏就自己去看C++ Primer Plus了,但是这确实是个大任务因为书太厚了
我们期末考是笔试,课程评分分为

期末70 平时30
期末考40分选择,20道题一题2分
10分判断
程序填空10分
程序阅读20分
程序设计题20分

考点其实也不多,有时间看我C++ Primer Plus读书笔记博客

那就开始概括吧,部分参考了学长的资料

概括

绪论

面向对象与面向过程:

  1. 类和对象区别
  2. 类的基本概念
  3. 封装

函数

  • 参数什么时候传入引用&,什么时候不需要(理解引用)
  • 内联函数是什么?如何实现?作用是?
  • 默认参数值的函数以及默认参数值的说明顺序
  • 函数重载,什么函数可以重载,如何实现函数重载

类与对象

  • 抽象 封装 继承 多态四大件
  • 类的定义
  • 继承的三种方式
  • 构造函数,默认构造函数,拷贝构造函数以及拷贝时的赋值(什么时候会调用拷贝构造函数),什么时候编译器会自动为你生成一个默认构造函数
  • 析构函数
  • 字符串类
  • 深拷贝和浅拷贝(你要理解指针的原理和使用)
  • 组合类的特点和构造函数

数组 指针

  • 数组名->指针(理解)
  • 常量指针和指针常量
  • 指针数组
  • this指针
  • 函数指针
  • 回调函数
  • new delete使用动态

数据共享与保护

  • 生存期与可见性
  • 静态成员函数、数据成员以及他们的特点和使用场景,如何调用静态成员函数
  • 友元类和友元函数
  • 保护,你要理解const常对象,常成员和常引用
  • 常成员函数的声明形式
  • 顶层const和底层cosnt含义和区别

继承与派生

  • 单继承多继承的概念
  • 派生类语法和派生类使用和生成过程
  • 改造基类成员(同名的时候怎么办?)
  • 类型兼容规则
  • 多继承构造函数
  • 派生与基类对象重名(ppt里有例子)
  • 区分虚继承、虚基类和虚函数

多态

  • 运算符重载(只有已存在支持运算符重载)
  • 定义为成员函数的运算符重载和定义为非成员函数的运算符重载
  • 友元
  • 整形+复数 运算实现的复现 前置++后置++的重载
  • 虚函数,构造函数不设计虚函数而析构函数鼓励设置成虚函数的原因
  • 纯虚函数
  • 抽象基类

重点考点 5.3 5.4 指针 指针关键考察:bool char int long int,表2-1 对象指针(类名对象指针名) this指针用法 new和delete不考 类型兼容规则实例的代码非常关键,“基类的构造函数不被继承这一页也是重要考点” 派生类的析构函数,同名成员举例部分,虚基类作用7-8 实现shape类(必考点,派生类调用,代码补全)几乎可以重载全部运算符(你觉得这句话为什么要加几乎 “.” “::“等不会重载)重载看实型+复数的例题,单目运算符重载方式 虚函数,虚函数必须是非静态的成员函数(典型代码,跟之前虚基类之间选一个进行考)抽象类的特点和理解,构造函数不虚,析构可虚,参数传递考小题

详情

面向过程与面向对象程序设计

面向过程程序设计

自顶而下,分而治之
程序结构

  • 按功能划分模块,形成树状结构
  • 各模块间关系尽可能简单,功能上相对独立

面向对象程序设计

  • 将客观事物看作具有属性和行为的对象
  • 抽象出同一类别对象的共同属性和行为将其封装作为类
  • 通过类的继承、多态实现代码复用

概念

  • 对象(Object) 系统中用来描述客观事物的实体,对象由一组属性和一组行为构成

    • 属性:描述对象静态特征的数据项——数据
    • 行为:描述对象动态特征的操作——函数
  • 类(Class) 具有相同属性和服务的一组对象的集合,为对象提供抽象描述,包裹属性和行为

类与对象——模具与实际件 类是人,对象是独特个体

  • 封装 将对象的属性和行为结合成独立的系统单元,意思是学会尽可能隐藏对象内部信息,只保留有限对外接口发生联系与交互

函数

内联函数

inline,编译时在调用处用函数体进行替换,节省参数传递、控制转移等开销

  • 内联函数体内无循环和switch
  • 内联函数声明在第一次被调用之前
  • 对照宏:#define ADD(A,B) A+B

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#include <iostream>
using namespace std;

const double PI=...
inline double calArea(double radius){
	return PI*radius*radius;
}

int main(){
double r=3.0;
double area = calArea(r);
cout<<area<endl;
return 0;
}

带默认参数函数

有默认参数的形参必须在形参列表后,也就是说默认参数右面不能有无默认值参数,调用时实参与形参结合从左向右

1
2
3
int add(int x,int y=5,int z=6); //✔对
int add(int x=4,int y=5,int z); //xx错
int add(int x=1,int y int z=6); //xx错

如果一个函数有原型声明,且原型声明在定义之前,则默认参数必须在函数原型声明中给出;而如果只有函数的定义或函数定义在前,默认参数在函数定义中给出

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
//1 原型声明在前
int add(int x=5,int y=6);
int main(){
	add();
}

//这里不能再指定默认值了
int add(int x,int y){
	return x+y;
}

int add(int x=5,int y=6){
	//直接定义
	return x+y;
}
int main(){
	add();
}

函数重载

将功能相似的函数以相同函数名声明形成重载,便于使用

1
2
3
4
5
6
7
int add(int x,int y);

//类型不同
float add(float x,float y);

//形参个数不同 
int add(int x,int y,int z);

注意形参必须存在不同,或个数类型而名字和返回值是不可行的
——根据函数有无const决定是否重载,而编译程序根据实参和形参类型、个数会自动最佳匹配来选择调用哪一个函数

析构函数不可重载

参数传递

  • 值传递——传递参数值,单向
  • 引用传递——双向传递 使用& 引用传递声明时候必须同时对它进行初始化,使其指向一个已存在的对象
1
2
3
4
int i,j;
int &ri=i;
j=10;
ri=j; //i=j

一个引用初始化后不能改为指向其他对象,可作形参

类与对象

抽象

对具体对象(即问题)进行概括,抽出该类对象的公共性质并加以描述的过程。
以时钟为例

  • 数据抽象:描述某类对象的属性或状态(时分秒)
  • 代码抽象:描述某类对象的共有的行为特征或具有的功能。(比如设定时间、显示时间的功能) 抽象通过类的声明具体实现

封装

将抽象的数据成员、代码成员相结合,视为一个整体
目的上增强了安全性,简化了编程,使用者也不必了解具体实现细节,通过接口和特定访问权限来使用类的成员
{}用于类声明中实现封装

1
2
3
4
5
6
7
8
class Clock
{
 public:
	 void setTime(int newH,int newM,int newS);
	 void showTime();
 private:
	 int hour,minute,second;
}

继承

C++中支持层次分类的机制,允许程序员在保持原有类特性的基础上进行更具体的说明

多态

即操作接口具有表现多种形态的能力,可以根据不同操作环境采用不同处理方式

  • 分类:按时机编译时多态和运行时多态分为两种,另有分类
    • 重载多态:函数重载,运算符重载
    • 强制多态:强制类型转换
    • 包含多态:不同类中的同名成员函数
    • 参数多态:函数模板、类模板
  • 目的:实现行为标示统一而减少程序中标识符的个数
  • 具体实现方式:重载函数和虚函数

多态性:用一个名字定义不同的函数,执行不同而相似的操作从而可以使用相同的调用方式来调用不同功能的同名函数

1
2
3
4
//强制多态
double Add(int x,double y){
	return x+y;
}

封面图来自Lanreta

本博客已稳定运行
发表了43篇文章 · 总计14万2千字

浙ICP备2024137952号 『网站统计』

𝓌𝒶𝒾𝓉 𝒻ℴ𝓇 𝒶 𝒹ℯ𝓁𝒾𝓋ℯ𝓇𝒶𝓃𝒸ℯ
使用 Hugo 构建
主题 StackJimmy 设计
⬆️该页面访问量Loading...