《c++对象内存模型》读书笔记
这本书大二第一次接触,刚开始由于功力不够不能很好的消化这本书的内功,多读几遍就会对自己的语言思想有很大的提升。这本书出版很久了,但一直没被淘汰。记录自己的学习笔记,温故知新。
C语言不是面向对象的计算机编程语言,它主要由基本数据类型,struct结构体,和函数,数据块和函数是没有关联的,函数就相当于服务指令,你想加工什么数据,就通过调用函数传人数据参数,从而获得该函数的服务。这样的话当工程很大的时候就就会定义很多的函数很多的结构体,这些结构体和函数根据去功能通过.h .m文件进行划分,成百上千的函数结构体会让头文件的引用变得非常的复杂,从而降低开发效率,和程序设计的难度。
C++是面向对象编程的计算机高级语言,封装,继承,多态。数据块和处理数据块的功能函数就关联起来,以前用文件的形式来划分数据块和函数变成的用类的形式。提高开发效率,用面向对象的程序设计思想来设计程序使得更加的清晰。
对于计算机语言,与其说高级语言牛叉到不如说是编译器牛叉,从本质上来讲,计算机高级语言写出来的源代码都逃不过编译器的掌心,它们都会被编译成对应的CPU指令,对于动态语言无非就是加上一个runtime,既然语言都最后会变成CPU指令,那么计算机语言之间都可以一一对应的关系,那么C++语言编写的程序也无非就是函数的调用,参数的传递,但在语法特性上又存在各自的差异。这就说明了编译器对C++语言做了很多的事。
计算机语言是标准,对应的编译器是标准的实现,编译器越是智能越是强大,它为你做的东西就多,这就为什么java,c#,swift不需要头文件,因为开发环境编译器能动态的检测到你设计的变量和函数,swift甚至不需要main函数,swift是面向对象的语言,如果编译器检测到了函数调用,它就会用这个函数作为main函数作为程序的入口点。
对于不同的书,不同的读者有不同的看法,以下为个人学习记录,不足之处还望见谅。
问题:
1.问什么会有self变量?
2.成员函数和虚函数的区别?
3.为什么虚函数能实现动态调用和多态?
1.c和c++对比
typedef struct point3d {
float a;
float b;
float c;
}point3d;
void printPoint3d(const point3d *pd){
printf("a= %g,b= %g,c = %g",pd->a,pd->b,pd->c);
}