04 2012 档案

摘要:class CHelloView : public CView{protected: // create from serialization only CHelloView(); DECLARE_DYNCREATE(CHelloView)// Attributespublic: CHelloDoc* GetDocument();(略)}问题1:在这里面的 GetDocument()是不是作为一个对象指针?如果是对象指针的话,也就是说除了可以用变量作为指针名,还可以用函数体来作为指针名,我不知道这样理解对不对?问题2:GetDocument()是属于CHelloDoc类的成员(或者对象)还是属 阅读全文
posted @ 2012-04-29 11:18 carbs 阅读(1036) 评论(0) 推荐(0)
摘要:百科的说明: OnCreate是一个消息响应函数,是响应WM_CREATE消息的一个函数,而WM_CREATE消息是由Create函数调用的。 在view类中,Create 是虚函数由框架调用,是用来“生成一个窗口的子窗口”。 而OnCreate 函数是用来“表示一个窗口正在生成”。一个窗口创建(C 阅读全文
posted @ 2012-04-29 09:49 carbs 阅读(18662) 评论(0) 推荐(2)
摘要:问题补充:UPDATE_COMMAND_UI是否仅仅只用于使菜单变灰、或者在菜单项里面打勾两项功能?简单的说ON_COMMAND是点了按钮或菜单项后的响应消息,ON_UPDATE_COMMAND_UI是用来表示对应的按钮和菜单项的状态的响应消息.比如WINDOWS自带的记事本程序,它的"格式"菜单下有个"自动换行",那么在编写记事本这个程序时,对文本进行自动换行或不自动换行的操作就要放在ON_COMMAND消息响应函数里,而"自动换行"菜单项左边是否打勾的操作则放在ON_UPDATE_COMMAND_UI响应函数里. 阅读全文
posted @ 2012-04-28 15:13 carbs 阅读(423) 评论(0) 推荐(0)
摘要:CPaintDC、CClientDC、CWindowDC和CMetaFileDC类的主要特点及区别 1、 设备环境(DC) (1)在Windows中,显示工作是基于设备环境的。所谓设备环境(DC)是一种Windows数据结构,该结构包含应用程序设备输出时所需要的信息。 (2)在使用任何绘图函数之前必须建立一个设备环境对象。 (3)在Visual C++ 6.0的MFC中提供了设备环境类CDC,它封装了绘图所需要的所有函数,其中包括了大多数的Windows API中的GDI函数。 2、 设备环境类2.1. CDC类 (1)CDC类是CObject类的派生类,也是所有设备环境类的... 阅读全文
posted @ 2012-04-27 16:08 carbs 阅读(4255) 评论(0) 推荐(0)
摘要:没有进行消息响应函数的申明或者消息映射:你检查下h文件中AFX_MSG与DECLARE_MESSAGE_MAP之间对OnLButtonDown申明没有,申明的格式为:afx_msg void OnLButtonDown(UINT nFlags, CPoint point);再检查下cpp文件中BEGIN_MESSAGE_MAP与END_MESSAGE_MAP()之间有有消息映射没有,格式为:ON_WM_LBUTTONDOWN() 阅读全文
posted @ 2012-04-27 15:46 carbs 阅读(2631) 评论(0) 推荐(0)
摘要:http://zhidao.baidu.com/question/415233232.html?quesup2&oldq=1前几天去华为赛门铁克笔试,有一道题:int a[5][5]; int (*p)[3]; p = a; &p[4][2]-&a[4][2]=?——————————————您的回答是这样的:首先:p=a;是非法的,类型不同a的地址要给d得强制转换: p=(int(*)[3])a;这样的话&p[4][2]-&a[4][2] =a+3*4+2-(a+5*4+2) = 14-22= -8##################我想问问,这里是-8 阅读全文
posted @ 2012-04-24 11:55 carbs 阅读(289) 评论(0) 推荐(0)
摘要:cdecl 由调用者清除堆栈 stdcall 由被调的函数清除堆栈 fastcall 是把函数参数列表的前三个参数放入寄存器eax,edx,ecx,其他参数压栈。_stdcall 与 _cdecl 的区别几乎我们写的每一个WINDOWS API函数都是__stdcall类型的,首先,需要了解两者之间的区别: WINDOWS的函数调用时需要用到栈(STACK,一种先入后出的存储结构)。当函数调用完成后,栈需要清除,这里就是问题的关键,如何清除??如果我们的函数使用了_cdecl,那么栈的清除工作是由调用者,用COM的术语来讲就是客户来完成的。这样带来了一个棘手的问题,不同的编译器... 阅读全文
posted @ 2012-04-23 19:59 carbs 阅读(439) 评论(0) 推荐(0)
摘要:类的静态成员函数往往是执行与该类相关的功能操作,但是又不涉及具体的类的对象。例如在MFC中,由句柄(窗口句柄HWND、设备句柄HDC、菜单句柄HMENU等)取得或建立(临时的)封装类对象(CWnd、CDC、CMenu等)的功能函数,都被定义为相应封装类的静态成员。如CWnd类的定义:static CWnd*PASCAL FromHandle(HWND hWnd) //取得与指定句柄建立影视关系的类对象,如果不存在,则自动创建临时对象###################################define DECLEAR_DYNAMIC(class_name)\public:\sta. 阅读全文
posted @ 2012-04-11 22:02 carbs 阅读(1437) 评论(0) 推荐(0)
摘要:1.求下面函数的返回值(微软)int func(x){ int countx = 0; while(x) { countx ++; x = x&(x-1); } return countx;}复制代码假定x = 9999. 答案:8思路:将x转化为2进制,看含有的1的个数。 2. 什么是“引用”?申明和使用“引用”要注意哪些问题? 答:引用就是某个目标变量的“别名”(alias),对应用的操作与对变量直接操作效果完全相同。申明一个引用的时候,切记要对其进行初始化。引用声明完 毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,不能再把该引用名作为其他变量名... 阅读全文
posted @ 2012-04-10 21:31 carbs 阅读(844) 评论(0) 推荐(0)
摘要:现有://teststatic.cppvoidTestStatic(intnCopy){staticinta=nCopy;cout<<a<<endl;}intmain(){TestStatic(1);TestStatic(2);}结果:11pressanykeytocontinue问题是:为什么这样的结果??回复内容【taodm】:static变量就这样的啊,只初始化一次。【lj860603】:static还有全局变量只能定义一次,初始化一次【Chiyer】:那你要什么样子static只在调用第一次的时候初始化所以TestStatic(1);//这个函数初始化a为1Te 阅读全文
posted @ 2012-04-10 14:28 carbs 阅读(494) 评论(0) 推荐(0)
摘要:1、派生类的对象和基类是属于的关系,即 对象 is a X类,对象属于X类。2、多态性的概念:了解多态性之前,要熟悉引用和对象的区别:对象存储在堆中,引用(符)存储在栈中,引用符的值是对象在堆中的地址,因此通过引用符可以轻松地找到对象。一般情况下,引用符和对象属于同一类型,基类的引用指向基类的对象,派生类的引用指向派生类的对象,但是我们知道,派生类对象也属于基类,所以基类引用符可以指向派生类对象。 一个基类的引用符,可以指向多种派生类对象,具有多种不同的形态,这种现象叫多态性。这种方式经常用作设计模式中的工厂模式。 阅读全文
posted @ 2012-04-06 21:36 carbs 阅读(289) 评论(0) 推荐(0)
摘要:怎样理解抽象类(含有至少一个纯虚函数的类)可以用作声明抽象类的指针和引用????? 阅读全文
posted @ 2012-04-06 21:35 carbs 阅读(180) 评论(0) 推荐(0)
摘要: 阅读全文
posted @ 2012-04-06 21:21 carbs 阅读(241) 评论(0) 推荐(0)
摘要:在一个基类或派生类的成员函数中,可以直接调用等级中的虚函数。此时,需要根据成员函数中this指针和它所指向的对象来判断调 用的是哪个函数。 阅读全文
posted @ 2012-04-06 20:59 carbs 阅读(467) 评论(0) 推荐(0)
摘要:class Base{protected: Base(){} ~Base(){}public: virtual void print() { cout<<"Base::print()!"<<endl; }};class Derived:public Base{public: Derived(){} ~Derived(){}private: void print() { cout<<"Derived::print()!"<<endl; }};int main(int argc,char*argv[]){ De 阅读全文
posted @ 2012-04-06 20:43 carbs 阅读(1124) 评论(0) 推荐(0)
摘要:对于普通成员函数的重载,可表达为下面的方式:1) 在同一个类中重载2) 在不同类中重载3) 基类的成员函数在派生类中重载因此,重载函数的访问是在编译时区分的,有以下三种方法:1.根据参数的特征加以区分,例如: Show(int , char)与Show(char *, float) 不是同一函数,编译能区分。2. 使用“::”加以区分,例如: Circle :: Show有别于Point :: Show 3. 根据类对象加以区分。 ACircle.Show() 调用Circle::Show() APoint.Show() 调用Point :: Show() 这里ACircle和APoint分. 阅读全文
posted @ 2012-04-06 20:40 carbs 阅读(326) 评论(0) 推荐(0)
摘要:1.虚基类的概念 在C++语言中,一个类不能被多次说明为一个派生类的直接基类,但可以不止一次地成为间接基类。这就导致了一些问题。为了方便 说明,先介绍多继承的“类格”表示法。 派生类及其基类可用一有向无环图(DAG)表示,其中的箭头表示“由派生而来”。类的DAG常称为一个“类格”。复杂类格画出来通常更容易理解。例如: 例 5-19 class L { public: int next; … }; class A : public L { }; class B : public L { }; class C : ... 阅读全文
posted @ 2012-04-06 12:22 carbs 阅读(5475) 评论(0) 推荐(5)
摘要:#include <iostream>#include <string>using namespace std;class Person{public: Person( string aName=“”, bool aSex=true, int aAge=0 ); void display() const;protected: string m_strName; bool m_bSex; int m_iAge;};Person::Person( string aName,bool aSex,int aAge ) :m_strName(aName), m_bS... 阅读全文
posted @ 2012-04-04 22:05 carbs 阅读(378) 评论(0) 推荐(0)
摘要:#include <iostream>using std::cout;class A{private: int m_iVal;};class B:public A{ double m_iVal; //试图修改基类中的m_iVal从int变为float是不可能的,B中有两个m_iVal ,关于更多内容后面介绍!};int main(){ A a; B b; cout << sizeof(a) << " " << sizeof(b) << endl; return 0;} 阅读全文
posted @ 2012-04-04 21:49 carbs 阅读(334) 评论(0) 推荐(0)
摘要:#include <iostream>using namespace std;void foo(){ class Bar { public: enum test {one,two}; typedef int INTE; Bar(int arg=0):m_iVal(arg) { } int get() const { return m_iVal; } private: int m_iVal; };Bar obj(100);//INTE a; // ERROR//cout << one << endl; // ERROR//test en; // ERROR c 阅读全文
posted @ 2012-04-04 20:04 carbs 阅读(448) 评论(0) 推荐(0)
摘要:enum ListStatus {Good, Empty, Corrupted};class List{private: class ListItem; //......public: enum ListStatus {Good, Empty, Corrupted}; //......};class List::ListItem{public: ListStatus status; //List::ListStatus}; 阅读全文
posted @ 2012-04-04 19:33 carbs 阅读(180) 评论(0) 推荐(0)
摘要:在外围类作用域之外引用外围类的静态成员,类型名和枚举名都要求有解析操作符List::pFunc myAction;//OKList::ListStatus stat = List::Empty;//OK引用枚举值时不能写成下面形式,因为枚举定义并不像类定义一样,他不产生名字空间List::ListListStatus::Empty//errorList::Empty;//OK 阅读全文
posted @ 2012-04-04 19:27 carbs 阅读(258) 评论(0) 推荐(0)
摘要:class List{private: class ListItem;//声明 class Red { ListItem *pli; //在看到类体前只能定义该类的指针或引用 }; class ListItem //定义 { Red *pref; }; 嵌套类本质是另一个类的"类型成员",两个类作为两个命名空间,成员名可相同 //即这两个nod类声明为同一个名字是没有关系的class Node{};class Tree{public: int m_iVal; class Node //Tree::Node隐藏了::Node { int m_iVal; }; Node *tr 阅读全文
posted @ 2012-04-04 17:04 carbs 阅读(305) 评论(0) 推荐(0)
摘要:class List{public: int init( int );private: class ListItem;};class List::ListItem{public: static int value; void mf( const List &r); int memb;};int List::ListItem::value;void List::ListItem::mf(const List &r){ }int main(){ return 0;} 阅读全文
posted @ 2012-04-04 17:00 carbs 阅读(393) 评论(0) 推荐(0)
摘要:嵌套类的成员函数(或静态成员)可以在嵌套类外定义,但不能在外围类中实现,只能在外围类之外实现。class List{public: int init( int );private: class Item { public: void mf( const List &r); static int value; int memb; };};int List::Item::value;void List::Item::mf(const List &r) //这里也是直接穿过private{ }int main(){ return 0;} 阅读全文
posted @ 2012-04-04 16:56 carbs 阅读(635) 评论(0) 推荐(0)
摘要:代码如下:#include<iosteam>class M{public:M(int a){A = a;B+=a;//这里每调用一次构造函数不就重新刷新一次B了吗?用这种方法记录生成对象的个数??}static void f1(M m);private:int A;static int B;};void M::f1(M m){cout<<"A="<<m.A;//在静态成员函数中,只能通过对象访问类的非静态成员cout<<"B="<<B;//B是静态成员,可以在静态成员函数中访问}int M::B 阅读全文
posted @ 2012-04-04 16:03 carbs 阅读(2550) 评论(0) 推荐(0)
摘要:问题:我看的书上写的对私有部分的访问可以是公共部分的成员函数,也可以是友员函数,那么可以直接对私有部分的静态成员进行初始化吗?回答:1.static成员的所有者是类本身和对象,但是多有对象拥有一样的静态成员。从而在定义对象时不能通过构造函数对其进行初始化。2.静态成员不能在类定义里边初始化,只能在class body外初始化。3.静态成员仍然遵循public,private,protected访问准则。4.静态成员函数没有this指针,它不能返回非静态成员,因为除了对象会调用它外,类本身也可以调用。下面一个类,和其中的一些错误用法:#include <iostream>#inclu 阅读全文
posted @ 2012-04-04 15:28 carbs 阅读(18938) 评论(0) 推荐(0)
摘要:当将类的某个数据成员声明为static时,该静态数据成员只能被定义一次,而且要被同类的所有对象共享。各个对象都拥有类中每一个普通数据成员的副本,但静态数据成员只有一个实例存在,与定义了多少类对象无关。静态数据成员的用途之一是统计有多少个对象实际存在。静态数据成员不能在类中初始化,实际上类定义只是在描述对象的蓝图,在其中指定初值是不允许的。也不能在够造函数中初始化该成员,因为静态数据成员为类的各个对象共享,那么每次创建一个类的对象则静态数据成员都要被重新初始化。 阅读全文
posted @ 2012-04-04 15:07 carbs 阅读(2711) 评论(0) 推荐(0)
摘要:#include <iostream>using namespace std;class A{private: int n;public: A(int n) { this->n=n; cout<<"A constructor"<<endl; } void show(); class B { public: B() { cout<<"B constructor"<<endl; } void disp() { cout<<"B disp"<<endl 阅读全文
posted @ 2012-04-04 12:18 carbs 阅读(695) 评论(0) 推荐(0)
摘要:13.1.9指向类成员的指针在C++语言中,可以定义一个指针,使其指向类成员或成员函数,然后通过指针来访问类的成员。这包括指向属性成员的指针和指向成员函数的指针。1.指向数据成员的指针在C++语言中,可以定义一个指针,使其指向类成员。当属性成员为静态和非静态时,指针的使用也有不同。其中,指向非静态数据成员的指针定义格式如下:1.<数据类型><类名>::*<指针名>[=&<类名>::<非静态数据成员>]指向非静态数据成员的指针在定义时必须和类相关联,在使用时必须和具体的对象关联。1.<类对象名>.*<指向非静态 阅读全文
posted @ 2012-04-04 01:58 carbs 阅读(5234) 评论(2) 推荐(0)
摘要:严格意义上的子对象初始化只能在复合类的构造函数的初始化列表中进行。作为变通,你可以在子对象所属的类中把真正执行初始化工作的代码写成一个普通公开成员函数,在复合类的构造函数体内调用这个函数。class A{ int data;public: A(){} A(int d):data(d){} void init(int d){data=d;}};class B{ A a;public: B(int d):a(d)//常规方法,在初始化列表中初始化子对象 { }};class C{ A a;public: C(int d)//变通方法,在函... 阅读全文
posted @ 2012-04-04 01:01 carbs 阅读(561) 评论(0) 推荐(0)
摘要:本文主要集中介绍 C++类中的 各种成员, 这些成员分别是: 类中的静态(static)成员变量, 成员函数; const(常量)成员变量, 成员函数和 const 对象; const static(常量静态)数据成员;对象数组;类中的对象成员;类成员指针;嵌套类;友元;this 指针以及.*和->*运算符共 12 种内容.1.类中的静态成员变量 static:被类中的所有对象所共享,静态成员属于整个类不属于某个对象.静态成员变量和全局变量差不多,只是他的作用范围为定义他的类及类的对象所知.1.1.当在一个类中声明静态成员变量时并没有定义该变量即没有为他分配存储空间,所以必须在类外对静态 阅读全文
posted @ 2012-04-04 00:37 carbs 阅读(435) 评论(0) 推荐(0)
摘要:一.简介 虚函数是C++中用于实现多态(polymorphism)的机制。核心理念就是通过基类访问派生类定义的函数。假设我们有下面的类层次:class A{public:virtual void foo() { cout << "A::foo() is called" << endl;}};class B: public A{public:virtual void foo() { cout << "B::foo() is called" << endl;}}; 那么,在使用的时候,我们可以:A * a = 阅读全文
posted @ 2012-04-03 21:13 carbs 阅读(302) 评论(0) 推荐(0)
摘要:1.C++程序设计 (钱能)这本书适合用于入门书或者课堂教程,了解一下C++语法特点,有啥关键字等。2.Windows核心编程 (第5版 英文版)我看英文书一直比较吃力,但是看英文的帖子还行,这本书断断续续的看完了,基本都忘得差不多了,后来没办法,找了个中文的电子版的书再看,对我来说进程知识、线程同步的内容非常实用,建议做windows平台开发的要多看几遍。3.Win32多线程程序设计 (侯捷)介绍多线程开发的书,入门的那种,主要介绍下一些相关的API,我是在看完windows核心编程之后才买该书的,翻了一遍,觉得内容大致都了解,就把书扔了。4.精通正则表达式 (猫头鹰书)对于需要解析复杂文本 阅读全文
posted @ 2012-04-03 09:39 carbs 阅读(294) 评论(0) 推荐(0)
摘要:一、选择题1、 以下函数调用语句中的实参个数为( D )。 excc((vl,v2),(v3,v4,v5),v6); (A)3 (B)4 (C)5 (D)62、 在C/C++程序中,( A )。 (A)函数的定义可以嵌套,但函数的调用不可以嵌套(B)函数的定义不可以嵌套,但函数的调用可以嵌套(C)函数的定义和函数的调用均不可以嵌套(D)函数的定义和函数的调用均可以嵌套3、 若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是( D )。(A)函数调用可以作为独立的语句存在(B)函数调用可以作为一个函数的实参(C)函数调用可以出现在表达式中 (D)函数调用可以作为一个函数的形参4、 若有 阅读全文
posted @ 2012-04-02 21:15 carbs 阅读(1633) 评论(0) 推荐(0)
摘要:分类:C++学习笔记2010-04-0314:11283人阅读评论(0)收藏举报回调函数和函数指针最近在看代码,写代码的人很喜欢用回调函数和函数指针。一直觉得回调函数和函数指针挺神秘的,所以查了一些资料,来与大家一起来分享。什么是回调函数简而言之,回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。为什么要使用回调函数因为使用回调函数可以把调用者和被调用者分开,调用者不关心谁是被调用者,所有它需知道的,只是存在一个具有某种特定原型、某些限制条件(如返回值为int)的被调用函数。回调函数就好像是一 阅读全文
posted @ 2012-04-02 20:50 carbs 阅读(171) 评论(0) 推荐(0)
摘要:分类:C++学习笔记2010-04-0123:41511人阅读评论(0)收藏举报前言C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的C++的书籍。在这篇文章中,我只想从虚函数的实现机制上面为大家一个清晰的剖析。当然,相同的文章在 阅读全文
posted @ 2012-04-02 19:00 carbs 阅读(162) 评论(0) 推荐(0)
摘要:分析:这是Adobe 公司2007 年校园招聘的最新笔试题。这道题除了考察应聘者的C++ 基本功底外,还能考察反应能力,是一道很好的题目。在Java 中定义了关键字final ,被final 修饰的类不能被继承。但在C++ 中没有final 这个关键字,要实现这个要求还是需要花费一些精力。首先想到的是在C++ 中,子类的构造函数会自动调用父类的构造函数。同样,子类的析构函数也会自动调用父类的析构函数。要想一个类不能被继承,我们只要把它的构造函数和析构函 数都定义为私有函数。那么当一个类试图从它那继承的时候,必然会由于试图调用构造函数、析构函数而导致编译错误。可是这个类的构造函数和析构函数都是私 阅读全文
posted @ 2012-04-02 16:50 carbs 阅读(311) 评论(0) 推荐(0)
摘要:如何使类不能被继承 如果大家熟悉java的话应该知道java中有一种类不能被继承,那就是final类.这种类有很多用处,尤其是在大 的项目中控制类的继承层次. 使子类数量不至于爆炸.在使用了多继承的类层次中这也是防止出现菱形继承层次结构的一个好办法. 要实现一个不能被继承的类有很多方法. 主要的思路就是使子类不能构造父类的部分,这样子类就没有办法实例化整个子类.这样就限制了子类的 继承. 所以我们可以将父类的构造函数声明成为私有的,但是这样父类不就不能实例化.我想可以添加一个静态帮助函数来进行构造. 虽然这样很简陋.但是这的确是一种解决方法. 可是如果只有这个方法能够解决,那么C++... 阅读全文
posted @ 2012-04-02 11:46 carbs 阅读(3395) 评论(0) 推荐(2)
摘要:对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。 #include<iostream>usingnamespacestd;classCExample{private: inta;public: CExample(intb) {a=b;} voidShow() {cout<<a<<endl;}};intmain(){ CExampleA(100); CExampleB=A; B.Show(); return0;}运行 阅读全文
posted @ 2012-04-02 11:43 carbs 阅读(304) 评论(0) 推荐(0)