C++有三种类型的成员函数:static/nonstatic/virtual 一.成员的各种调用方式 C with class 只支持非静态成员函数(Nonstatic member function),20世纪80年代中期,又引入了virtual function,但是有一种常见的观点是:virtual function只不过是一个跛脚的指针,没有什么用.1980年,static member function最后被引入. 1.1 非静态成员函数 设计准则之一就是非静态成员函数必须具有与一般非…
默认构造函数的构建操作 默认构造函数在需要的时候被编译器合成出来.这里"在需要的时候"指的是编译器需要的时候. 带有默认构造函数的成员对象 如果一个类没有任何构造函数,但是它包含一个成员对象,该成员对象拥有默认构造函数,那么这个类的隐式默认构造函数就是非平凡的,编译器需要为该类合成默认构造函数.为了避免合成出多个默认构造函数,编译器会把合成的默认构造函数.拷贝构造函数.析构函数和赋值拷贝操作符都以内联的方式完成.一个内联含有具有静态链接,不会被文件以外者看到.如果函数不适合做成内联,就…
这一章的和三章的git用法有联系,so,吧上一章的git基本用法搞好了再来,具体的方法就是看书上网查,这里就不做详细步骤介绍了.这章就有点意思了,是源码的下载和编译,有能看的,能自己鼓捣的,本章介绍的是方法,可以类推其他.Android一直主要就是Linux内核的移植,Linux的移植有主要是Linux驱动的移植,所以我们在学习的时候要搭起码俩环境,一个Android的,一个Linux的.本章前半部分是介绍Android 的源码下载和编译,后半部分是Linux的内核源码下载和编译,Linux内核…
member function相对于nonmember function之间不存在效率之间的差别,因为编译器内部已经将"member 函数实体"转化为对等的"nonmember 函数实体",转化过程: 1.改写函数的函数原型,以安插一个额外的参数到member function中,用于提供一个存储管道,使class object得以调用该函数,该额外参数被称为this指针. 2.将每一个"对nonstatic data member的存取操作"改…
一.C和C++对比: C语言的Point3d: 数据成员定义在结构体之内,存在一组各个以功能为导向的函数中,共同处理外部的数据. typedef struct point3d { float x; float y; float z; }Point3d; Point3d可能采用独立的“抽象数据类型”(abstract data type)来实现: class Point3d { public: Point3d(float x = 0.0,float y = 0.0,float z = 0.0) :…
一.三种程序设计范式: C++程序设计模型支持三种程序设计范式(programming paradiams). 程序模型(procedural model) char boy[] = "ccpang"; char *p_son; p_son = ]; strcpy(p_son,boy); if(!strcmp(p_son,boy)) take_to_disneyland(boy); 抽象数据模型(abstract data type model) 此模型的抽象是和一组表达式(publi…
C++ Standard将copy constructor分为trivial 和nontrivial两种:只有nontrivial的实例才会被合成于程序之中.决定一个copy constructor是否是nontrivial的,则是由classs是否具有 bitwise copy semantics,在以下四种情况下:class 不具有bitwise copy semantics,如果一个已经声明的类缺乏copy constructor ,编译器为了正确处理“以一个 class object 作…
C++新手一般由两个常见的误解: 如果任何class没有定义默认构造函数(default constructor),编译器就会合成一个来. 编译器合成的的default constructor会显示的设定“class内每一个data member的默认值” 一.编译器在哪种情况下才会合成默认构造函数: 对于未声明构造函数的类,只有在以下四种情况下编译器才会为它们合成默认构造函数: 类的成员有一个类对象(Member Class Object),且该成员含有默认构造函数(default Const…
1.Member的各种调用方式 1.1 Nonstatic Member Functions 实际上编译器是将member function被内化为nonmember的形式,经过下面转化步骤: 1.给函数添加额外参数——this. 2.将对每一个nonstaitc data member的存取操作改为this指针来存取. 3.将member function 重写成一个外部函数.对函数名精选mangling 处理,使之成为独一无二的语汇. class A{ public: int x, y; i…
当我们需要设置class member的初值时,要么是经过member initialization list ,要么在construcotr内. 一.先讨论必须使用member initialization list的四种情况: 在以下四种情况,为了能够让程序被顺利编译,必须使用member initialization list: 当初始化一个reference mmember时 当初始化一个const member时 当调用一个base class的constructor时,并且基类有一组…