2012年6月8日

摘要: 本次应用:定义基类成员函数指针数组,并且使用基类成员函数指针初始化该数组,然而,在调用该数组时,使用指向子类对象的父类指针调用,此时,调用的是子类对象的成员函数。#include <iostream>//基类class base{public:virtual void print1(const char* str){std::cout<<"base class print1 func:"<<str<<std::endl;}virtual void print2(const char* str){std::cout<< 阅读全文
posted @ 2012-06-08 17:49 很多不懂呀。。 阅读(300) 评论(0) 推荐(0) 编辑
摘要: int *p[4]; //指针数组。 是个有4个元素的数组, 每个元素的是指向整型的指针。(数组的每个元素都是指针)int (*p)[4]; //数组指针。 它是一个指针,指向有4个整型元素的数组。(一个指针指向有4个整型元素的数组)int *func(void); //指针函数。 无参函数, 返回整型指针。 (函数的返回值为int*) int (*func)(void); //表示函数指针,可以指向无参, 且返回值为整型指针的函数。 (函数的返回值为int)右左规则:因为C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既着... 阅读全文
posted @ 2012-06-08 17:23 很多不懂呀。。 阅读(6761) 评论(0) 推荐(5) 编辑
摘要: C++中,成员指针是最为复杂的语法结构。但在事件驱动和多线程应用中被广泛用于调用回叫函数。在多线程应用中,每个线程都通过指向成员函数的指针来调用该函数。在这样的应用中,如果不用成员指针,编程是非常困难的。 刚遇到这种语法时也许会让你止步不前。但你会发现,使用恰当的类型定义之后,复杂的语法是可以简化的。本文引导你了解成员函数指针的声明,赋值和调用回叫函数。 成员函数指针的声明 一个成员函数指针包括成员函数的返回类型,后随::操作符类名,指针名和函数的参数。初看上去,语法有点复杂。其实可以把它理解为一个指向原函数的指针,格式是:函数返回类型,类名,::操作符,指针星号,指针名,函数参数。 ... 阅读全文
posted @ 2012-06-08 15:46 很多不懂呀。。 阅读(291) 评论(0) 推荐(0) 编辑
摘要: 函数指针 一个函数在编译时被分配一个入口地址,将这个入口地址称为函数的指针,可 以用一个指针变量指向该函数指针,然后通过该变量来调用函数。有关说明: 1、函数指针的声明格式: 函数返回值类型(*指针变量名)(参数类型列表) 或者是: typedef 函数返回值类型 (*指针变量名)(参数类型列表)2、一个函数指针只能指向一种类型的函数,即具有相同的返回值和相同的参 数的函数 3、关于函数指针的加减运算没有意义 函数指针数组定义: 函数定义:void fun1(void *p);void fun2(void *p);void fun3(vo... 阅读全文
posted @ 2012-06-08 14:09 很多不懂呀。。 阅读(1019) 评论(0) 推荐(0) 编辑
摘要: C++类的成员函数数组声明与使用与普通的函数数组稍有不同:首先谈谈声明 1.数组声明:int Fun[MAX_LEN];//包含MAX_LEN个int类型元素的int型数组 2.指针数组:int *Fun[MAX_LEN];//函数名其实为函数的入口地址,可以理解为指向函数所占用内存的指针,所以数组需声明为指针数组 3.函数数组:int (*Fun[MAX_LEN])(int, int);//函数指针数组,与普通函数指针数组相同 4.成员函数数组:int (ClassName::*Fun[MAX_LEN])(int, int);//ClassName为类名,声明类的成员函数指针数组必须在此加. 阅读全文
posted @ 2012-06-08 14:02 很多不懂呀。。 阅读(591) 评论(0) 推荐(0) 编辑
摘要: 函数指针数组的定义方法,有两种:一种是标准的方法;一种是蒙骗法。第一种,标准方法:{分析:函数指针数组是一个其元素是函数指针的数组。那么也就是说,此数据结构是是一个数组,且其元素是一个指向函数入口地址的指针。根据分析:首先说明是一个数组:数组名[]其次,要说明其元素的数据类型指针:*数组名[].再 次,要明确这每一个数组元素是指向函数入口地址的指针:函数返回值类型 (*数组名[])().请注意,这里为什么要把“*数组名[]”用括号扩起来呢?因为圆括号和数组说明符的优先级是等同的,如果不用圆括号把指针数组说明表达式扩起来,根据圆括号和方括号的结合方向,那么 *数组名[]() 说明的是什么呢?是元 阅读全文
posted @ 2012-06-08 13:56 很多不懂呀。。 阅读(238) 评论(0) 推荐(0) 编辑
摘要: 这里的所说的掩码是指一个int值来涵盖多种情况。其实这种掩码我们也经常遇到过。比如MFC程序中的窗口类CWnd类的鼠标移动消息处理函数:afx_msg void OnMouseMove(UINT nFlags,CPoint point); 该函数的第一个参数UINT nFlags就可以称为一个掩码。这个掩码涵盖了在移动鼠标时用户是否同时还按下了鼠标左键、鼠标右键等多种情况。其实这还算是简单的,因为这只是一个组合键的问题。现在存在多种可能组合的情况。比如在一个二维图形编辑软件,使用鼠标点选图形编辑,每次只能选一个图形。现在所有的点图形放在点数组,所有线图形放在线数组。要实现点选图形,得先设定一个 阅读全文
posted @ 2012-06-08 11:37 很多不懂呀。。 阅读(258) 评论(0) 推荐(0) 编辑
摘要: 软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最近看设计模式的书,对于每个模式,用C++写了个小例子,加深一下理解。主要参考《大话设计模式》和《设计模式:可复用面向对象软件的基础》两本书。本文介绍策略模式的实现。 策略模式是指定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。也就是说这些算法所完成的功能一样,对外的接口一样,只是各自实现上存在差异。用策略模式来封装算法,效果比较好。下面... 阅读全文
posted @ 2012-06-08 11:11 很多不懂呀。。 阅读(283) 评论(0) 推荐(0) 编辑
摘要: 2010-05-07 21:26 670人阅读 评论(2) 收藏 举报先看一下策略模式的UML类图:从类图可以看出,策略模式基本和简单工厂模式没什么区别,从我的理解他们两个最大的区别就是:简单工厂模式是实现对象的多样性,而策略模式适合类中的成员以方法为主; 简单工厂模式只能解决对象创建问题,对于经常变动的算法应使用策略模式。 放代码看看吧:Cpp代码 //策略基类 classCOperation { public: intm_nFirst; intm_nSecond; virtualdoubleGetResult() { doubledResult=0; returndResult; } }; 阅读全文
posted @ 2012-06-08 10:35 很多不懂呀。。 阅读(195) 评论(0) 推荐(0) 编辑

导航