2011年9月28日

CLR中的委托和事件

摘要: 还记得这个声明吗: Returntype (*lpfun)(params). 这是本地C++中的函数指针,即把此类型变量指针返回类型和实参一样的函数,就可以用此类型变量来执行此过程。如下:#include <iostream>typedef int (*lpfun)(int&);int getvalue(int& a){ return a;}void main(){ lpfun p=getvalue; int var=55; printf("the value is: %d\n",p(var));}结果为: 和函数指针一样,在C++/CLR中的事 阅读全文

posted @ 2011-09-28 11:33 天上星 阅读(856) 评论(0) 推荐(0) 编辑

2011年9月15日

类5-类的继承、虚函数、纯虚函数、虚析构函数

摘要: 一、类的继承 就像家谱一样,就是一个继承图。爷爷-父亲-儿子-孙子等.类也一样,上面的类称为基类,也称父类。基类下面的类叫子类也叫派生类。 子类对父类的一些属性等有所继承也有所发展,因此才有了类的继承。 C++中类的继承格式为: class ChildClass:public ParentClass; 子类后面要加上冒号及类限制符(public\protected\private)和基类。 class CExample{ public: ... protected: ... private: ...}在一个类中,会有三个访问限制符。public 是公共,公开的意思,只要有对象访问C... 阅读全文

posted @ 2011-09-15 17:04 天上星 阅读(1142) 评论(0) 推荐(0) 编辑

2011年9月14日

类模板

摘要: 类模板与原来的函数模板非常像,这里只给出了一个类模板的例子,其它的不多说了。#include <iostream>using namespace std;template<class T,class T2> //可含有多个类型,用逗号分开class CSamples //类的声明{public: CSamples(const T Values[],int count); //函数定义 CSamples(const T& value) { m_Values[0]=value; m_free=1; } CSamples() ... 阅读全文

posted @ 2011-09-14 15:32 天上星 阅读(215) 评论(0) 推荐(0) 编辑

2011年9月10日

运算符重载

摘要: 我们平常用的+、-、*、/等基本类型,如果我们想用对象也进行如此的操作,就需要我们自定义类并重新实现这样的算法,这就是我们要说的运算符重载,有点像函数重载的味道。运算符重载不允许我们定义新的运算符也不允许改变它的优先级,它的优先级按照原来本身的优先级进行计算。其中有以下几种运算符不能重载: 作用域解析运算符 :: 条件运算符 ?: 直接成员访问运算符 . sizeof 运算符 sizeof 解除对指向类成员的指针引用运算符 .* 运算符的关键定为operator,后面我们常用的运算符号,operator和运算符之间有没有空格都可以,像<、>等中间不用有空格 ,但像特殊的运算符要有空 阅读全文

posted @ 2011-09-10 16:40 天上星 阅读(689) 评论(1) 推荐(0) 编辑

2011年9月9日

联合union

摘要: 在过去内存受限的时候(最大才64M),C++中有一个功能允许多个变量共享同相同的内存(显然不能同时使用),我们称之为联合。如下例子:union Rsize{ double longth; float width; int height;} myuser;即联合中的三个变量共用一块内存。 Rsize为联合类型的名称,myuser为此种类型的变量。也可以不同时声明变量:union Rsize{ double longth; float width; int height;} ;在变量产生之前,并没有内存分配,这和类是一样的。如果不指明联合的名字,... 阅读全文

posted @ 2011-09-09 16:32 天上星 阅读(537) 评论(0) 推荐(0) 编辑

类4-析构和复制构造函数

摘要: 类的构造函数是产生类对象,每产生一个类对象就会占用一定的内存,当类不用时,对象又是如何不再占用内存呢?这里就会用到析构函数,即销毁类对象用到的函数。如果一个类成员中没有析构函数,则编译器在销毁对象时会提供一个此函数进行对象销毁,把类数据成员变量从自由存储器中去除。一. 析构函数没有返回值,也不提供任何形参。 因此每个类只有一个析构函数。 它的命名为~加上类名即可。在类外定义时要加上类名和域名解析符。 #include <iostream>#include <cstring>using namespace std;class CBox{public: CBox(); ~. 阅读全文

posted @ 2011-09-09 15:12 天上星 阅读(250) 评论(0) 推荐(0) 编辑

2011年9月8日

类3-类的static属性

摘要: 在类中的static数据成员或函数都是独立于对像的。即只要程序一运行,类就已存在了,这时不管此类的对象是否存在,但这些static的成员都已存在了。也就是说static成员只建立一次,在类产生时就建立了,与对象无关,但对象可以访问它。因此,在访问static成员时,对象不一定存在,所以就不能访问类的非static成员,所在在static函数中不能访问非static成员,否则编译器会报错。static的数据成员在开始时要初始化,因与对象无关,故在全局部分初始化此数据成员,初始化时不要带上static关键字,但要带上类名和作用域解析运算符。否则编译器以为是声明的新变量。static的函数成员在类外 阅读全文

posted @ 2011-09-08 10:49 天上星 阅读(1328) 评论(0) 推荐(0) 编辑

类2--类的const属性

摘要: 大家记得这样的声明: const int rvalue=5;一、固定对象即rvalue是固定的,其值不容许改动。同理,当我们声明了一个类时,要产生一个固定的对象,即对象的数据成员是不容许再改动的。我们可以用这样的方式处理(以上节CBox类为例):const CBox box(10,20,5);这样我们就产生了一个以10X20X5尺寸大小的对像,这个对象不允许再被改动。被声明为const的对象它的指针this也是const的,所以指向的对像是不能改动的。二、类的const成员函数 格式为在类的成员函数头后面加上const即可。 此时把此函数指针也指定为const,这时不能在函数定义的内部给类的. 阅读全文

posted @ 2011-09-08 10:02 天上星 阅读(547) 评论(0) 推荐(0) 编辑

2011年9月6日

类1

摘要: 请看下面的类及其调用:#include <iostream>using namespace std;class CBox{private: float m_long,m_width,m_height; void mytest() { cout<<endl <<m_long <<endl; }public: void testcall(); CBox(float lv,float wv=0,float hv=0):m_long(lv),m_width(wv),m_height(hv) { ... 阅读全文

posted @ 2011-09-06 15:48 天上星 阅读(275) 评论(0) 推荐(0) 编辑

2011年8月31日

函数重载与函数模板

摘要: 一、函数重载重载就是函数名相同但实参的类型或数量不同的函数的调用。注意有两种:实参是类型不同或数量不同。(为什么不说形参,因为会有默认值的存在)如得到一数组中最大值,因为有int和double基本的类型,一个函数无法表达int getmax(int intArr[],int len);double getmax(double douArr[],int len);为什么要同名? 主要是方便记忆。如你输入getmax后,编译器会自动给你提示有这样的函数且会把它的形参类型带出来,便于选择。当然你也可以写成不同的名称: getintmax,getdoublemax.多个在一程序中的同名函数就是函数重. 阅读全文

posted @ 2011-08-31 11:44 天上星 阅读(3258) 评论(0) 推荐(0) 编辑

导航