1.::域名解析符
返回值类型名 类名::函数成员名(参数表)
{
函数体。
}
这个是在类内声明函数后在类外定义的一种方法!
如果不加"类名::"的话,编译系统就不会知道你的函数属于哪个类;
另外,这样定义函数一定要在类中声明之后,说明它是类的成员函数才可以!
在类内声明的时候就不需要::了,直接 返回值类型 函数名(参数表) 就可以了!
2.枚举类型emum
1.10 枚举类型
在实际问题中,有些变量的取值被限定在一个有限的范围内。例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等。如果把这些量说明为整型,字符型或其它类型显然是不妥当的。为此,C语言提供了一种称为“枚举”的类型。在“枚举”类型的定义中列举出所有可能的取值,被说明为该“枚举”类型的变量取值不能超过定义的范围。应该说明的是,枚举类型是一种基本数据类型,而不是一种构造类型,因为它不能再分解为任何基本类型。
11.10.1 枚举类型的定义和枚举变量的说明
1. 枚举的定义枚举类型定义的一般形式为:
enum 枚举名{ 枚举值表 };
在枚举值表中应罗列出所有可用值。这些值也称为枚举元素。
例如:
该枚举名为weekday,枚举值共有7个,即一周中的七天。凡被说明为weekday类型变量的取值只能是七天中的某一天。
2. 枚举变量的说明
如同结构和联合一样,枚举变量也可用不同的方式说明,即(1)先定义后说明(2)同时定义说明(3)直接说明。
设有变量a,b,c被说明为上述的weekday,可采用下述任一种方式:
enum weekday{ sun,mou,tue,wed,thu,fri,sat };
enum weekday a,b,c;
或者为:
enum weekday{ sun,mou,tue,wed,thu,fri,sat }a,b,c;
或者为:
enum { sun,mou,tue,wed,thu,fri,sat }a,b,c;
11.10.2 枚举类型变量的赋值和使用
枚举类型在使用中有以下规定:
1. 枚举值是常量,不是变量。不能在程序中用赋值语句再对它赋值。
例如对枚举weekday的元素再作以下赋值:sun=5;都是错误的。
2. 枚举元素本身由系统定义了一个表示序号的数值,从0开始顺序定义为0,1,2…。如在weekday中,sun值为0,mon值为1,…,sat值为6。
【例11.10】
main(){
enum weekday
{ sun,mon,tue,wed,thu,fri,sat } a,b,c;
a=sun;
b=mon;
c=tue;
printf("%d,%d,%d",a,b,c);
}
说明:
只能把枚举值赋予枚举变量,不能把元素的数值直接赋予枚举变量。如:
a=sum;
b=mon;
是正确的。而:
a=0;
b=1;
是错误的。如一定要把数值赋予枚举变量,则必须用强制类型转换。
如:
a=(enum weekday)2;
其意义是将顺序号为2的枚举元素赋予枚举变量a,相当于:
a=tue;
还应该说明的是枚举元素不是字符常量也不是字符串常量,使用时不要加单、双引号。
【例11.11】
main(){
enum body
{ a,b,c,d } month[31],j;
int i;
j=a;
for(i=1;i<=30;i++){
month[i]=j;
j++;
if (j>d) j=a;
}
for(i=1;i<=30;i++){
switch(month[i])
{
case a:printf(" %2d %c/t",i,'a'); break;
case b:printf(" %2d %c/t",i,'b'); break;
case c:printf(" %2d %c/t",i,'c'); break;
case d:printf(" %2d %c/t",i,'d'); break;
default:break;
}
}
printf("/n");
}
3.C++中.h和.cpp的关系?
C++中,一般把类的定义放到头文件(.h)中,把类的实现放到源文件(.cpp)中,所以,一般在C++中,一个类一般需要一个与类同名的头文件和一个源文件。比如定个一个类 Sample,类中定个一个私有成员变量,和两个公共成员函数,有如下代码:
//Sample.h
class Sample
{
private:
DWORD dw; //私有成员变量
public:
Sample(DWORD dw=0); //构造函数,可以不用
~Sample(); //析构函数,可以不用
void SetDw(DWORD dw); //公共成员函数 SetDw ,设置变量
DWORD GetDw(); //公共成员函数 GetDw ,取得变量
};
//Sample.cpp
//代码中因为函数形参名与类成员相同,所以访问类成员变量时用了this指针,表明这是类成员变量,而不是参数。
#include "Sample.h" //头文件不可少
void Sample::Sample(DWORD dw) //构造函数的实现
{
this->dw=dw;
}
void Sample::SetDw(DWORD dw); //SetDw 成员函数的实现
{
this->dw=dw;
}
DWORD Sample::GetDw(); //GetDw 成员函数的实现
{
return this->dw;
}
P138页的实现
1.在.h文件定义:
HBRUSH m_hYellowBrush;
HBRUSH m_hRedBrush;
2.在.cpp中OnInitDialog()初始化:
m_hYellowBrush = CreateSolidBrush(RGB(255,255,0));
m_hRedBrush = CreateSolidBrush(RGB(0,0,0));
3.在OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)添加代码:
if (nCtlColor==CTLCOLOR_EDIT)
{
pDC->SetBkColor(RGB(255,255,0));//黄色
return m_hYellowBrush;
}
if (nCtlColor==CTLCOLOR_DLG)
{
pDC->SetBkColor(RGB(0,0,0));//红色
return m_hRedBrush;
}
return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);;
ex07b
1.ex07bview.cpp(92) : error C2440: “=”: 无法从“bool”转换为“HANDLE”
对比源代码发现:
while (h=::FindFirstFile(dlgFile.m_strFilename,&fData)
!=(HANDLE) 0xFFFFFFFF)
少了半个(,低级错误,改正之后OK
2.程序运行,点击左键弹出两个对话框,一个设计的,一个打开对话框
解决:没有设置设计对话框的属性,Style:Child,Border:None
3.程序运行,全部删除还是有错误,不弄了,可能跟系统和编程工具有关吧