找回密码
 立即注册
搜索
热搜: 活动 交友
查看: 52|回复: 9

面向对象程序设计复习贴

[复制链接]

44

主题

112

回帖

5304

积分

版主

积分
5304
发表于 昨天 10:34 | 显示全部楼层 |阅读模式
写在前面:

楼主本学期选了面向对象程序设计的课,但是没有去上。
要期末考了,因此准备开始自学。
本楼用于记载楼主预计约5天的自学心路历程。




附上可能有用的链接:
NoughtQ的笔记本
追光的笔记本
ZJU内网19~20历年卷

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

44

主题

112

回帖

5304

积分

版主

积分
5304
 楼主| 发表于 昨天 10:42 | 显示全部楼层
楼主会在下面的楼层当中分享一些金句/较为重要的知识点。

44

主题

112

回帖

5304

积分

版主

积分
5304
 楼主| 发表于 昨天 10:42 | 显示全部楼层
C++ 的设计哲学:


可读性(readability):直接用代码表达思想和意图
安全性(safety):尽可能在编译时强制保证安全性
高效性(efficiency):不浪费时间和空间
抽象性(abstraction):将杂乱的构造分好类
多范式(multi-paradigm):赋予程序员完全的控制权、责任和选择权
实际上,C++ 还有助于我们培养良好的编码习惯——在用 C++ 写代码时,我们会很自然地考虑到以下问题:


我是否在以对象本应被使用的方式使用它们?——类型检查、类型安全
我是否正在高效使用内存?——引用 / 拷贝语义、移动语义
我是否在修改我不应该修改的东西?——const 和 const 正确性
而其他语言则放宽了上述限制。

44

主题

112

回帖

5304

积分

版主

积分
5304
 楼主| 发表于 昨天 10:52 | 显示全部楼层
The students should learn to code by themselves first then start to use AI.


Do not use AI when you coding C++ homework.  
You need to control AI,  do not let AI control you.
But we will provide an AI coding example in the course, to show how to work with AI.

44

主题

112

回帖

5304

积分

版主

积分
5304
 楼主| 发表于 昨天 11:19 | 显示全部楼层
① C++语言中规定函数定义时必须指出类型;
② C++语言规定函数说明必须使用原型说明,不得用简单说明;
③ C++语言规定凡是从高类型向低类型转换时都需加强制转换;
④ C++语言中符号常量建议使用const关键字来定义;
⑤ C++语言中引进了内联函数;
⑥ C++语言允许设置函数参数的默认值;
⑦ C++语言引进了函数重载和运算符重载;
⑧ C++语言引进了引用概念,使用引用作函数的参数和返回值;
⑨ C++语言提供了与C语言不同的I/O流类库,方便了输入/输出操作;
⑩ C++语言为方便操作还采取了其他措施;


44

主题

112

回帖

5304

积分

版主

积分
5304
 楼主| 发表于 昨天 13:52 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

44

主题

112

回帖

5304

积分

版主

积分
5304
 楼主| 发表于 昨天 13:56 | 显示全部楼层
【构造顺序】成员对象 → 基类 → 派生类
【析构顺序】派生类 → 基类 → 成员对象(反向)


【虚函数调用】看对象实际类型(动态绑定)
【非虚函数调用】看指针/引用类型(静态绑定)


【拷贝构造】A a3 = a1;  (初始化)
【赋值运算符】a2 = a1;   (已存在的对象)


【static成员】类内声明,类外定义(int A::k = 0;)
【static函数】无this,不能访问非static成员,不能加const


【const成员函数】可被const对象调用,不能修改成员
【非const成员函数】不能被const对象调用


【delete】单个对象用delete,数组用delete[]
【虚析构】基类必须加virtual,否则派生类析构不调用


【异常catch】先派生类,后基类
【dynamic_cast】需要基类有虚函数,转换失败返回nullptr(指针)或抛异常(引用)


【虚函数默认参数】函数是动态绑定,默认参数是静态绑定

44

主题

112

回帖

5304

积分

版主

积分
5304
 楼主| 发表于 昨天 13:56 | 显示全部楼层
除非有别的理由,通常使用 vector
vector 的排序速度很快
如果程序里有很多小的元素,且对空间要求较高的话,不要使用 list 或 forward_list
如果程序要求对元素的随机访问,那么就用 vector 或 deque
vector 是动态分配的数组,而 deque 是一块块连接起来的 (linked-blocks) 数组,因此后者的访问时间更长
如果程序需要在容器中间插入元素,那么使用 list 或 forward_list
如果程序仅需要再首尾两端插入元素,无需在中间插入元素,那么就用 deque


44

主题

112

回帖

5304

积分

版主

积分
5304
 楼主| 发表于 昨天 15:28 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

44

主题

112

回帖

5304

积分

版主

积分
5304
 楼主| 发表于 昨天 15:30 | 显示全部楼层
.h 头文件用于定义接口


一般包括:函数原型、类声明、类型定义、宏、常量、外部变量等,可能为多个源文件所用
建议一个头文件仅包含一个类的声明
用到头文件的接口时,记得在代码开头用 #include 导入,它将被包含的文件插入到 .cpp 文件内这条语句的位置上
#include "xx.h":先搜索当前目录,然后寻找系统目录
#include <xx.h>:直接搜索系统目录
#include <xx>:与 #include <xx.h> 相同
以下是一个标准的头文件结构,里面的声明仅出现一次,这样可以避免头文件内容被多次包含,从而导致编译失败的问题




#ifndef HEADER_FLAG
#define HEADER_FLAG
// Type declaration here...
#endif // HEADER_FLAG
.cpp 源文件一般起到实现函数或类的作用


一般包括:函数实现、可执行代码
如果是用于类的实现的话,建议与对应的头文件同名
编译器一次只看一个 .cpp 文件,并将其编译为 .obj 文件
链接器将所有的 .obj 文件链接为一个可执行文件

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|RealDevClub ( 沪ICP备2024093864号-1 )

GMT+8, 6-23-2026 03:58 , Processed in 0.070272 second(s), 29 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表