分享
 
 
 

VC++/MFC 教程2(英文)

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

Lesson 2: C++ Essentials

If you want to use Microsoft Visual C++, it helps a ton if you really know C++. Everything is about classes. If you are used to plain C, you won't really see the big deal with classes until you use them for a while. Let's review what you need to know about classes to get started with VC++.

A class is a structure for the most part. Let's work with an example instead of me just telling you rules. Let's make a class to represent a line. In the .h file you would define the class as follows: class CLine

{

int m_nX1;

int m_nY1;

int m_nX2;

int m_nY2;

public:

// constructors

CLine();

CLine(int x1, int y1, int x2, int y2);

// destructor

~CLine();

// set the line data

void SetPoints(int x1, int y1, int x2, int y2);

// draw the line

void Draw();

}

A quick word about naming conventions. Class names usually start with 'C' and the member variables usually are prefixed by a 'm_'. Then in the microsoft way you will have a letter to let you know what data type the name is and then the name of the variable. Capitalize the letter of all new words in the name. Don't use underscores and stuff like that. I recommend this Microsoft standard (called Hungarian notation) since it is widely accepted and very easy to read. If you see m_pPoint, you would assume this is a member variable of a class that points (it is a pointer) to a point. If you see fData, you would assume that it is a floating-point value.

Back to our class. The int variables are the end points of the line. Note that they are before the 'public:' part. This means that a programmer using this class will not be allowed to manipulate these guys directly. They are not for 'public' use. The functions under the public statement are for public use. The first three are called constructors. These functions are called anytime a new CLine class is created. Here are some examples when the are called: // this calls CLine()

CLine MyLine;

// this is a pointer to a CLine class

CLine *pMyLine;

// this calls CLine()

pMyLine = new CLine;

// this is a pointer to a CLine class

CLine *pMyLine;

// this calls CLine(int x1, int y1, int x2, int y2)

pMyLine = new CLine(0,0,10,10);

// this calls CLine(int x1, int y1, int x2, int y2)

CLine MyLine(0,0,10,10);

All of these construct a line. Some initialize it to its default settings and others copy coordinates. The 'new' keyword is used to create new things in C++, like malloc in C. You need to call 'delete' for everything you say new to, like free in C. This goes for classes as well as other data types. I could allocate an array of 100 integers with: // a pointer to some integers

int *pNumbers;

// make memory for 100 of them

pNumbers = new int[100];

// set the first element to 0

pNumbers[0]=0;

// set the last element to 99

pNumbers[99]=99;

// free the memory.

delete [] pNumbers;

Notice the [] after the delete. This is to tell the program to delete the entire array. If you say 'delete pNumbers;' you will only free memory for the first element. You will then be 'leaking' memory. Memory leaks are when you forget to delete memory. This may end up crashing your computer if you use all the computers memory.

Sorry, let's get back to the constructors for CLine. The code for these constructor functions which automagically get called when a new line is created will look like: CLine::CLine()

{

m_nX1=0;

m_nX2=0;

m_nY1=0;

m_nY2=0;

}

CLine::CLine(int x1, int y1, int x2, int y2)

{

m_nX1=x1;

m_nX2=x2;

m_nY1=y1;

m_nY2=y2;

}

Notice that the function declaration is much like a regular 'C' function except that we put the class name and two colons in front of the function name (CLine::). One difference with constructors is that they don't have a return value. This is the case for destructors also. A destructor is the function which automagically gets called when our CLine is deleted or goes out of scope. For instance: // this is a pointer to a CLine class

CLine *pMyLine;

// this calls CLine()

pMyLine = new CLine;

// memory for the class is cleared up and ~CLine() is called

delete pMyLine;

{

// this calls CLine()

CLine MyLine;

}

// this '}' ends the section of the program where MyLine is

// valid. ~CLine() will be called. (MyLine goes out of 'scope')

For our class, ~CLine() doesn't need to do anything. However, sometimes you may want to put your cleanup code here. Like deleting any allocated memory in your class. Since we have nothing to do out function code is empty: CLine::~CLine()

{

// do nothing

}

Let's fill in the other 2 functions. void CLine::SetPoints(int x1, int y1, int x2, int y2)

{

m_nX1=x1;

m_nX2=x2;

m_nY1=y1;

m_nY2=y2;

return;

}

void CLine::Draw()

{

// psuedo code here, these are operating system

// functions to draw a line

MoveTo(m_nX1, m_nY1);

LineTo(m_nX2, m_nY2);

return;

}

How would I call these functions? Here are a couple of examples. One with pointers and one without. CLine *pLine = new CLine(0,0,10,10);

pLine->Draw();

delete pLine;

CLine MyLine;

MyLine.SetPoints(0,0,10,10);

MyLine.Draw();

That's it for the class. Now this class can be used in other classes. You can imagine a CSquare class that has 4 Cline classes in it: class CSquare

{

CLine m_LineTop;

CLine m_LineLeft;

CLine m_LineBottom;

CLine m_LineRight;

//...

}

Or better yet, the point of all of this class stuff, you can use the CLine class to make your own class. This is done a ton in Visual C. Lets say you wanted to draw lines in your program, and you thought the line class might be nice, but it is missing an important feature, it doesn't let you set the line color. Instead of writing a whole new class, you can simple inherit the CLine class. This would look like this: class CColorLine : public CLine

{

public:

void Draw(long color);

};

What's going on here? Well with this class we have all the functionality of our other class, but now we can use this other Draw() function which allows us to set the color. The CPP code would look like: void CColorLine::Draw(long color)

{

// psuedo code here, these are operating system

// functions to draw a line

SetColor(color);

CLine::Draw();

return;

}

Now we have all the functionality of the other class but we added an extra function called Draw. But it's the same name as our other Draw! No matter. Cpp is smart enough to know that if you call Draw(color) to use the new function, but if you call Draw() it will use the old function. The strange part of the code may be CLine::Draw(). This just tells our program to call the base class's Draw function. We save ourselves from having to write that LineTo and MoveTo code again. Pretty cool, huh? Now we can do something like this: CColorLine MyLine;

MyLine.SetPoints(0,0,10,10);

// assuming 0 is black, this will draw a black line.

MyLine.Draw(0);

Of course I'm leaving out a ton of aspects and things here. Like defining operators, overriding functions, virtual functions, protected and private members... the list goes on. You have enough to get started though.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有