摘要:
//HeapOnly.cpp #include using namespace std;只能在堆上分配空间:我们可将类的析构函数用private来修饰,也就是把析构函数私有化,因为自动变量与静态变量的对象都在释放空间的时候都需要访问析构函数。若析构函数私有,外面就不能调用,这时候会产生编译错误,这样就达到了只能在堆上分配空间了。但是,把析构函数私有化,那么我们就不能调用delete了, 因为它也需要访问析构函数。这就要求我们自己去提供回收内存空间的函数,以防内存泄漏。 class HeapOnly { public: HeapOnly() { cout destroy(); // HeapO. 阅读全文
posted @ 2013-10-16 12:44
AlexChowG
阅读(1275)
评论(0)
推荐(0)
摘要:
C 里面static 声明的变量只对本源文件可见变量存储在静态存储区,初始化为0只初始化一次,比如在函数体里面声明的值编译出的程序执行时不会重复声明 阅读全文
posted @ 2013-10-16 12:42
AlexChowG
阅读(134)
评论(0)
推荐(0)
摘要:
虚拟继承虚继承会在派生类加多一个指向基类的指针(除非基类没有数据成员,这样就没有必要用一个指针去指向基类了),如果基类和派生类都有虚函数,同用,如果基类A,B有两个,而且两个基类还有base基类,那么虚继承后也有一个指针指向base(base要有数据才行)总结:无论继承了多少类,一个类只有最多一个虚函数表指针;无论继承多么乱,某一个基类最多只有一个指针指向(特殊是基类没有数据成员,就没必要为其分配一个指针) 阅读全文
posted @ 2013-10-16 12:41
AlexChowG
阅读(163)
评论(0)
推荐(0)
摘要:
虚函数和纯虚函数有以下所示方面的区别。(1)类里如果声明了虚函数,这个函数是实现的,哪怕是空实现,它的作用就是为了能让这个函数在它的子类里面可以被覆盖,这样的话,这样编译器就可以使用后期绑定来达到多态了。纯虚函数只是一个接口,是个函数的声明而已,它要留到子类里去实现。(2)虚函数在子类里面也可以不重载的;但纯虚函数必须在子类去实现,这就像Java的接口一样。通常把很多函数加上virtual,是一个好的习惯,虽然牺牲了一些性能,但是增加了面向对象的多态性,因为很难预料到父类里面的这个函数不在子类里面不去修改它的实现。(3)虚函数的类用于“实作继承”,继承接口的同时也继承了父类的实现。当然大家也可 阅读全文
posted @ 2013-10-16 12:37
AlexChowG
阅读(274)
评论(0)
推荐(0)
摘要:
C++构造函数调用自身的另一个构造函数在Java中,可以通过this(参数)或者类名(参数) 调用自身的另一个构造方法,但在C++中,直接调用 类名(参数)是不行的,因为这样C++会从新分配内存,并且在当前构造方法结束时会调用析构函数,导致对象构造不成功,导致不能像Java那样初始化对象。C++正确调用方法是new(this)构造方法(参数)析构函数析构函数是在包含其对象的右括号结束地方被调用int main(){ { A a;}//a.~A();将在此处被调用} 阅读全文
posted @ 2013-10-16 12:36
AlexChowG
阅读(151)
评论(0)
推荐(0)
摘要:
标准C++中有没有接口和纯抽象类的概念?下面是C++的创造者的回答,供你参考Bjarne Stroustrup:我在对人们解释这个问题的过程中遇到了很多问题,而且我也一直不能理解为什么让人们理解这个问题是如此困难。自C++出现那天起,就存在着包含数据成员的类和不包含数据成员的类。在过去,人们强调利用一个最基础的设施以及该设施内部的东西来构造软件系统,而那个“最基本的设施”通常就是抽象基类。从80年代中叶到80年代末,那些仅由虚拟函数组合而成的类通常都被称为ABCs(Abstract Base Classes 抽象基类)。1987年,我在C++中加入了纯虚函数的概念,一个纯虚函数必须被其派生类重 阅读全文
posted @ 2013-10-16 12:36
AlexChowG
阅读(1723)
评论(0)
推荐(0)
摘要:
一 抽象类和接口抽象类:抽象类是特殊的类,只是不能被实例化(将定义了纯虚函数的类称为抽象类);除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的,但同时也能包括普通的方法。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们。虽然不能定义抽象类的实例,但是可以定义它的指针,这正是用抽象类实现接口的重点所在。接口:接口是一个概念。它在C++中用抽象类来实现,在C#和Java中用interface来实现。接口是引用类型的,类似于类,和抽象类的相似之处有三 阅读全文
posted @ 2013-10-16 12:35
AlexChowG
阅读(226)
评论(0)
推荐(1)
摘要:
枚举类型我们在写程序的时候常常需要定义一组与对象相关的属性例如一个文件可能会以三种状态输入输出和追加之一被打开典型情况下我们通过把每个属性和一个唯一的const 值相关联来记录这些状态值因此我们可能会这样写const int input = 1;const int output = 2;const int append = 3;并按如下方式使用这些常量bool open_file( string file_name, int open_mode);// ...open_file( "Phoenix_and_the_Crane", append );尽管这样做也能奏效但是它有 阅读全文
posted @ 2013-10-16 12:34
AlexChowG
阅读(163)
评论(0)
推荐(0)
摘要:
C++数组1、被显式初始化的数组不需要指定维数值编译器会根据列出来的元素的个数来确定数组的维数// 维数为3 的数组int ia[] = { 0, 1, 2 };2、指定维数的数字如果显式初始化数字,初始化队列不能超过维数大小,如果小于维数大小,用0填充3、字符数组 ,用{}和""方式初始化的数字长度不一样,""初始化的数组维数多一,用来存放04、一个数组不能被另外一个数组初始化也不能被赋值给另外一个数组而且C++不允许声明一个引用数组(即由引用组成的数组),要把一个数组拷贝到另一个中去必须按顺序拷贝每个元素// ok: 类型为int*的指针的数组int 阅读全文
posted @ 2013-10-16 12:31
AlexChowG
阅读(248)
评论(0)
推荐(0)
摘要:
通过类句柄减少编译次数当一个项目的类的头文件包含了另一个类,但是如果修改了另一个类,那么所以包含这个类的所有类都要重新编译,这样导致项目编译次数增多,浪费资源。通过类句柄可以解决这个问题。例子://handle.hclass handle{class cheshire; //这就是类句柄,声明了handle类有一个cheshire的类,但没有定义cheshire *c; //使用cheshire类声明一个变量public:void init();void read();}//另外一个文件:handle.cppclass handle::cheshire{//数据成员//函数成员}void ha 阅读全文
posted @ 2013-10-16 12:26
AlexChowG
阅读(148)
评论(0)
推荐(0)
浙公网安备 33010602011771号