最近的一些零碎的笔记
- 当显示字符类型的指针时,这个指针将显示字符串而不是指针的内容,如果要在字符指针中显示地址,只需把它强制转换成void指针
- 只有地址可以被存储在指针变量中
- 函数头结尾处的const,使函数成为常量函数,常量函数不能改变调用对象,主要是为了确保函数不会意外地改变对象。
- 构造函数的三种用法
1) 初始化类数据成员,类的数据成员不能在类的声明中被初始化,因为每个对象都有自己的变量,并且必须由正在被创建的对象所需要的值来初始化。
2) 构造函数还可以用于验证数据。
3) 构造函数必须用于为对象分配内存。
Tip:构造函数不能有返回类型,即使是空类型,如果提供了任意类型的构造函数,编译器就不会提供默认的构造函数了。所以一般还是显式包含一个一个默认的构造函数比较好两种 5.复制构造函数
1) 执行对象所有组件的简单变量和变量之间的赋值复制,也成为位复制
2) 逻辑复制,复制内容为指针
6.复制构造函数使用的三种情况
1) 当使用另一对象作为参数初始化一个对象时
2) 当对象被值传递给函数时
3) 当对象从函数中返回时
8.类和结构的区别:只有一条,就是数据成员在结构中默认为public,而在类中默认是private。
9.如果函数是被递归调用的,就不要使用内联函数。
10.不要使用赋值操作符在初始化列表中初始化数据成员。
11.如果想把继承后的私有类型重新定义为protected类型,就用using和作用域解析操作符重写它。一个例子
1 class Base
2 {
3 protected:
4 int dam;
5 };
6 class Derive:private Base
7 {
8 protected:
9 using Base::dam;
10 };
12. 多态性的三个条件:继承,虚函数,指针或引用
13. 静态绑定:当创建了类型为基类的的指针时,无论该指针再指向派生类的什么对象,编译器都会调用和指针类型基类有关的函数,称为静态绑定
14. 不能有虚构造函数,但可以创建虚析构函数,不能有虚构造函数,但可以创建虚析构函数,为什么呢?举个例子,基类动态分配了一个浮点数数组p,派生类动态分配了浮点数数组q,当使用基类指针指向一个派生类对象时,这个指针只能看到基类,当这个对象被删除时,就只有基类数组被删除,从而给派生类造成了内存泄漏。
15. 基类函数被声明为纯虚函数的两种情况:
1) 不能参与派生类可能需要的动作
2) 想强制每个派生类重定义这个函数
方法:virtual return_type identifier(parameter list)=0;
16. 抽象类:至少有一个纯虚函数的类,下面为用途
1) 允许多态性
2) 可以定义能够在派生类中被继承并且不用重定义的具体成员
3) 为必须在派生类中重定义的纯虚函数提供了模型
17. 向上和向下强制类型转换:当派生类对象被转换成基类对象时,发生向上强制转换,当基类对象被转换成派生类对象时,发生向下强制转换,同时,向下强制转换指向对象的指针是可以的,但是需要使用动态强制转换来完成,也就是运行期间完成的。语法如下:dynamic_cast<type>(data);
18. 一个程序的优良性可以由以下原则衡量,一是模块是独立的,二是函数具有单一的目的。
19. 构造函数,析构函数,非成员函数,和赋值操作符在派生类是并没有被继承,必须重新定义它们。
20. 基类的构造函数执行时间早于派生类的构造函数,而析构函数要晚于派生类的析构函数。
21. 对基类构造函数的调用应该在派生类的初始化表部分。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述