随笔分类 - C++
摘要:typedef struct _MyStruct { int a; int b; int c; _MyStruct() { a = 0; b = 0; c = 0; } }MyStruct; int main() { #if 1 MyStruct* st[3]; //指针数组 MyStruct* s
阅读全文
摘要:背景 类型转换的需求,C中有显示/隐式的强制类型转换。C++为了兼容保留了,但也提供了四种运算符来实现转换。 C语言强制类型转换的缺点 从形式上无法判断功能和风险 将多态基类指针转换成派生类指针时,没有检查安全性。无法判断转换后的指针是否指向一个派生类对象 难以寻找使用转换的地方 C++提供的强制转
阅读全文
摘要:ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间。 在C++中,对文件的操作是通过stream的子类fstream(file stream)来实现的,所以,要用这种方式操作文件,就必须加入头文件fstream.h。 fstream有两个子类:ifstrea
阅读全文
摘要:1.匿名函数的基本语法为: //[捕获列表](参数列表)->返回类型{函数体} int main() { auto Add = [](int a, int b)->int { return a + b; }; std::cout << Add(1, 2) << std::endl; //输出3 re
阅读全文
摘要:先看一下可执行文件加载进内存后形成的进程在内存中的结构,如下图: 代码区:存放CPU执行的机器指令,代码区是可共享,并且是只读的。 数据区:存放已初始化的全局变量、静态变量(全局和局部)、常量数据。 BBS区:存放的是未初始化的全局变量和静态变量。 栈区:由编译器自动分配释放,存放函数的参数值、返回
阅读全文
摘要:总结一下遇到的关于char *p、char p[]和字符串的题目: 例一:(指针的指针) 1 void getmemory(char **p) 2 { 3 p = (char *)malloc(100); //p应该是*p,因为这里是对传入的二重指针所指向的内容分配空间,而不是二重指针的地址, 4
阅读全文
摘要:面试被问到上述问题,所以特地总结一下: 一、new和malloc的区别。 1.new可以返回指定类型的指针,并且自动分配内存大小;malloc需要计算手动计算分配空间的大小,并且返回值需要强转为实际类型的指针。 2.malloc只会进行内存分配,不会进行初始化,所以其值是随机的;new在内存分配的同
阅读全文
摘要:昨天看到一句话:对虚函数的调用不一定是动态联编,我的映像中一直以为虚函数就是动态联编的,所以记录下来。 一、动态联编是什么? 引自多态的概念:当不同的对象调用相同的名称的成员函数时,可能引起不同的行为(执行不同的代码),这种现象叫多态性。将函数调用链接相应函数体的代码的过程称为函数联编。在C++中,
阅读全文
摘要:例一: #include <iostream> using namespace std; class A { public: char c; }; class B { public: int a; short b; }; class C { public: int a; short b; char
阅读全文
摘要:前因: 1.C++中多重继承,即一个派生类可以有多个基类。如果多个基类有同名成员或同名函数,派生类对象对其访问时会产生二义性。 举例: #include <iostream> using namespace std; class Base1 { public: Base1(int var){cout
阅读全文
摘要:记录了学习虚函数与纯虚函数中有一些疑问,以及平常可能不注意的地方。 Q0:虚函数是怎么实现的? 0:简单的说,是通过虚函数表实现的。如果一个类中含有虚函数,则系统会为这个类分配一个指针成员指向一张虚函数表(vtbl),表中每一项指向一个虚函数的地址,实现上就是一个函数指针的数组。 Q1:基类函数加上
阅读全文