2013年10月22日
摘要: 1、过载:一个类中,方法名相同,形参表不同的方法。2、重写:子类与父类的virtual方法,方法名,形参表相同。3、考虑下面的情况,子类与父类方法名相同。 父类是virtual方法 形参表相同 ---> 构成重写 父类是virtual方法 形参表不同 ---> 隐藏父类方法 父类不是virtual方法 形参表相同 --->隐藏父类方法 父类不是virtual方法 形参表不同 --->隐藏父类方法4、只有在父类是virtual方法,且方法名,形参表相同,才构成重写。其他的情况都不构成重写,也不构成过载,子类同名不能过载父类的方法,只会隐藏父类的方法。5、只有在父类是vir 阅读全文
posted @ 2013-10-22 20:13 Andy Niu 阅读(2127) 评论(0) 推荐(0)
摘要: 1、虚函数实现了运行时多态,他是如何实现的呢?2、含有虚函数的对象,内部有一个vptr(virtual table pointer),指向虚函数表的指针。3、含有虚函数的类有一个vtbl(virtual table),是一个数组,内部包含的是一组函数指针。4、每个对象都有一个自己的vptr,类的所有对象共享vtbl5、vtbl包含一组函数指针,这些函数指针指向虚函数,虚函数包括: a、对于父类的虚函数,如果没有重写,包含父类的虚函数; b、对于父类的虚函数,如果重写了,包含自身重写后的函数; c、自身中,新创建的虚函数。6、另外,运行时是如何获取对象的类型的? 在类的虚方法表中还有一个... 阅读全文
posted @ 2013-10-22 19:22 Andy Niu 阅读(366) 评论(0) 推荐(0)
摘要: 1、对象分为字段和方法,字段分为:static,non-static。方法分为static,non-static,virtual2、static字段,放在静态存储区,所有的对象共享。non-static字段,每个对象拥有自己的一份内存copy3、static方法,non-static方法,virtual方法都放在代码区,所有的对象共享。调用方法的时候,如何区分方法内的数据是那个对象的呢? 方法内的数据是方法绑定对象的数据,因为调用方法的时候,需要指定对象。对于virtual方法,还要增加一个额外指针,用于在运行时,根据对象的真实类型绑定方法。注意:就算有多个virtual方法,也只有一个额外. 阅读全文
posted @ 2013-10-22 19:05 Andy Niu 阅读(267) 评论(0) 推荐(0)
摘要: 1、操作系统对硬件封装,对外暴露API,编程语言对操作系统封装,对外暴露API,程序员利用编程语言的API进行编程。2、硬盘利用磁性保存数据,内存是晶体管,用电流的有无状态表示数据。因此断电后,硬盘的数据还在,内存的数据消失了。3、访问硬盘使用磁头读写数据,访问内存使用数据总线。4、每个进程都会占用一定的内存,对于32位操作系统,进程占用的内存必须小于 4G-操作系统常驻内存。5、系统中的进程很多,每个都占用一定的内存,会导致内存不够用,就会出现roll-out,roll-in。内存不够用的情况下,去执行一个进程,先把其他暂时不用的进程内存roll-out,然后把该进程的内存roll-in。在 阅读全文
posted @ 2013-10-22 18:47 Andy Niu 阅读(266) 评论(0) 推荐(0)
摘要: 1、使用C#语言,比较简单,使用私有的构造方法和公有的静态方法返回静态实例。在C#中,赋值的时候,基本类型是整体拷贝,引用类型是复制引用。2、使用C++语言,有几个地方需要注意: a、编译器会自动生成copy构造方法和copy复制操作符,从而导致生成多个实例。为了解决这个问题,声明私有的copy构造方法和copy复制操作符,但是不定义。通过继承noncopyable是个好办法,noncopyable中声明了私有的copy构造和copy赋值,并且构造方法是protected。子类会继承父类的所有成员,只不过是不能访问父类的私有成员。 b、静态构造方法返回引用没有问题,如果返回指针,需要考虑什.. 阅读全文
posted @ 2013-10-22 18:28 Andy Niu 阅读(277) 评论(0) 推荐(0)
摘要: 私有成员有没有被继承?私有成员被继承,只不过子类不能访问父类的私有成员。很好证明: 1 class Base 2 { 3 private : 4 int a; 5 }; 6 7 class Derived:Base 8 { 9 private :10 int b;11 };12 13 14 int _tmain(int argc, _TCHAR* argv[])15 {16 Base base;17 std::cout<<sizeof(base); // 418 19 std::cout<<std::endl;20 21 Derived de... 阅读全文
posted @ 2013-10-22 10:37 Andy Niu 阅读(2135) 评论(0) 推荐(0)