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内核…
一.三种程序设计范式: 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和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) :…
默认构造函数的构建操作 默认构造函数在需要的时候被编译器合成出来.这里"在需要的时候"指的是编译器需要的时候. 带有默认构造函数的成员对象 如果一个类没有任何构造函数,但是它包含一个成员对象,该成员对象拥有默认构造函数,那么这个类的隐式默认构造函数就是非平凡的,编译器需要为该类合成默认构造函数.为了避免合成出多个默认构造函数,编译器会把合成的默认构造函数.拷贝构造函数.析构函数和赋值拷贝操作符都以内联的方式完成.一个内联含有具有静态链接,不会被文件以外者看到.如果函数不适合做成内联,就…
当我们需要设置class member的初值时,要么是经过member initialization list ,要么在construcotr内. 一.先讨论必须使用member initialization list的四种情况: 在以下四种情况,为了能够让程序被顺利编译,必须使用member initialization list: 当初始化一个reference mmember时 当初始化一个const member时 当调用一个base class的constructor时,并且基类有一组…
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…
如果一个类有虚函数,那么这个类的虚函数会被放在一个虚函数表里面, 使用这个类声明的对象中,会有一个指向虚函数表的指针,当使用指向 这个对象的指针或者这个对象的引用调用一个虚函数的时候,就会从虚函数表中去 查找该函数,然后对其进行调用. 如果有如下的类: class A { public : int m_a; A() {} ~A() {} virtual void test() { cout << "A info : " << __LINE__ <<…
C++对象模式 非静态数据成员放置在每个类对象内,静态数据成员则被放置在所有类对象之外.静态和非静态的成员函数也被放置在所有类对象之外.每个类产生一堆指向虚函数的指针,放在虚表(vtbl)中.每个类对象维护一个指针(vptr),指向相关的虚表.虚表的首元素维护了每个类所关联的type_info对象. 优点:空间与存取时间效率高 缺点:一旦所用到的类对象的非静态数据成员有所修改,那么代码就要重新编译 加上继承 C++支持单一继承.多重继承和虚拟继承.在虚拟继承的情况下,基类不管在继承链中被派生多少…