C++笔试题知识点整理:
- 在链接阶段可以发现被调用的函数未定义
原因:
1.编辑:也就是编写C/C++程序。
2.预处理:相当于根据预处理指令组装新的C/C++程序。经过预处理,会产生一个没有宏定义,没有条件编译指令,没有特殊符号的输出文件,这个文件的含义同原本的文件无异,只是内容上有所不同。
3.编译:将预处理完的文件进行一系列词法分析、语法分析、语义分析及优化后,产生相应的汇编代码文件。
4.链接:通过链接器将一个个目标文件(或许还会有库文件)链接在一起生成一个完整的可执行程序。 链接程序的主要工作就是将有关的目标文件彼此相连接,也就是将在一个文件中引用的符号同该符号在另外一个文件中的定义连接起来,使得所有的这些目标文件成为一个能够***作系统装入执行的统一整体。在此过程中会发现被调用的函数未被定义。 - GCC的正确编译流程
原因:预处理-编译-汇编-链接 - String中的函数
1、string.capacity()指分配给string对象的容量大小
2、string.length()指字符长度大小
3、string.size() - 观察者模式:
观察者模式(Observer Pattern)是一种行为设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。当主题对象的状态发生变化时,所有依赖于它的观察者对象都会得到通知并自动更新。观察者模式通常用于实现分布式事件处理系统。 - 多线程堆与栈:
堆共用,栈不共用 - 构造函数的调用顺序:
总结:class Base { public: Base() { std::cout << "Base Constructor" << std::endl; } }; class Member { public: Member() { std::cout << "Member Constructor" << std::endl; } }; class Derived : public Base { private: Member m; public: Derived() { std::cout << "Derived Constructor" << std::endl; } }; int main(){ Derived d; return 0; } //Base Constructor //Member Constructor //Derived Constructor
基类构造函数:首先调用基类的构造函数。
派生类成员变量的构造函数:然后调用派生类成员变量的构造函数,按它们在类中的声明顺序。
派生类构造函数:最后调用派生类自身的构造函数。
静态成员变量在程序执行前初始化。因此在main函数之前构造 - 派生类可以从基类继承的函数是?
1、Public 继承
2、Protected 继承
3、Private 继承
Private和protected的区别,是否希望继承被访问 - static_cast<int*> 是C++中的一种强制类型转换操作符,用于将一个指针转换为 int* 类型。static_cast 是C++提供的一种类型安全的转换方式,主要用于基本数据类型之间的转换、指针类型之间的转换以及类层次结构中的向上和向下转换。
- String & operator = (const String &other); 的作用是将另一个 String 对象的值赋给当前对象,并返回当前对象的引用。