类
声明 | 权限 |
public | 可以被任何函数访问 |
protected | 只允许被本类和派生类的成员函数访问 |
private | 只允许类本身声明的函数进行访问 |
类的成员函数
当成员函数的函数体代码较短时,可以在定义类时直接定义成员函数,即在类内定义成员函数。
当成员函数体代码较复杂时,可以在类外定义成员函数,但必须在类内对成员函数进行声明。
当成员函数体代码较复杂时,可以在类外定义成员函数,但必须在类内对成员函数进行声明。
【例如】
//-----------------main.h的内容--------------//
class ClassName
{
public:
void method(char *p);
void show(void)
{
cout<<m_member;
}
private:
char m_member;
};
void ClassName::method (char *p)
{
int temp;
cin>>temp;
if(temp==1)
{
m_member='a';
}
else
{
m_member=*p;
}
}
//----------------main.c的内容------------------//
#include <iostream.h>
#include "main.h"
void main()
{
ClassName test;
char ch='b';
cout<<"please input a number/n";
test.method(&ch);
test.show();
}
//-----------------main.h的内容--------------//
class ClassName
{
public:
void method(char *p);
void show(void)
{
cout<<m_member;
}
private:
char m_member;
};
void ClassName::method (char *p)
{
int temp;
cin>>temp;
if(temp==1)
{
m_member='a';
}
else
{
m_member=*p;
}
}
//----------------main.c的内容------------------//
#include <iostream.h>
#include "main.h"
void main()
{
ClassName test;
char ch='b';
cout<<"please input a number/n";
test.method(&ch);
test.show();
}
New
new的功能是动态分配内存,其语法格式为:
new 类型名(初值列表) ;
类型名包括基本类型,结构体类型,类类型等。
用new生成的变量是一个无名变量,它返回一个指针。
new 类型名(初值列表) ;
类型名包括基本类型,结构体类型,类类型等。
用new生成的变量是一个无名变量,它返回一个指针。
Delete
释放new所分配的内存空间的函数,其语法形式为:
delete 指针变量名;
若想释放new所建立的数组,要在指针变量前加[]
【例如】
//----------------main.c的内容--------------------//
#include <iostream.h>
#include "main.h"
void main()
{
ClassName test;
char *pch;
int *pi;
pi = new int(22);
cout<<*pi<<"/n";
pch = new char('b');
cout<<"please input a number/n";
test.method(pch);
test.show();
delete pch;
delete pi;
}//--------------main.h的内容不变---------------//
delete 指针变量名;
若想释放new所建立的数组,要在指针变量前加[]
【例如】
//----------------main.c的内容--------------------//
#include <iostream.h>
#include "main.h"
void main()
{
ClassName test;
char *pch;
int *pi;
pi = new int(22);
cout<<*pi<<"/n";
pch = new char('b');
cout<<"please input a number/n";
test.method(pch);
test.show();
delete pch;
delete pi;
}//--------------main.h的内容不变---------------//
构造函数
功能:为新创建的对象分配内存空间,并对对象进行初始化
形式:和类的名字相同,并且该函数无函数类型的说明,不允许有返回值。调用时为隐式调用,若类中不给出类的构造函数,系统将自动给出,默认的构造函数没有参数,且函数体为空。
构造函数的函数体可以写在类体内也可以写在类体外,并且可以重载——定义多个参数不同或者类型不同的构造函数。
形式:和类的名字相同,并且该函数无函数类型的说明,不允许有返回值。调用时为隐式调用,若类中不给出类的构造函数,系统将自动给出,默认的构造函数没有参数,且函数体为空。
构造函数的函数体可以写在类体内也可以写在类体外,并且可以重载——定义多个参数不同或者类型不同的构造函数。
析构函数
功能:释放对象所占用的空间
形式:与类的名字相同,只是在类名字前面加上“~”符号,不允许定义函数的返回值类型,无返回值,没有任何形式的参数,且不可重载,一个类只能有一个。
形式:与类的名字相同,只是在类名字前面加上“~”符号,不允许定义函数的返回值类型,无返回值,没有任何形式的参数,且不可重载,一个类只能有一个。
【例如】
//----------------main.c的内容--------------------//
#include <iostream.h>
#include "main.h"
void main()
{
ClassName test;
char *pch;
int *pi;
pi = new int(22);
cout<<*pi<<"/n";
pch = new char('b');
cout<<"please input a number/n";
test.method(pch);
test.show();
delete pch;
delete pi;
}
//----------------main.c的内容--------------------//
#include <iostream.h>
#include "main.h"
void main()
{
ClassName test;
char *pch;
int *pi;
pi = new int(22);
cout<<*pi<<"/n";
pch = new char('b');
cout<<"please input a number/n";
test.method(pch);
test.show();
delete pch;
delete pi;
}
//-----------------main.h的内容--------------//
class ClassName
{
public:
ClassName();
~ClassName();
void method(char *p);
void show(void)
{
cout<<m_member<<endl;
}
private:
char m_member;
};
void ClassName::method (char *p)
{
int temp;
cin>>temp;
if(temp==1)
{
m_member='a';
}
else
{
m_member=*p;
}
}
ClassName::~ClassName ()
{
cout<<"Class Destroy/n";
}
ClassName::ClassName()
{
cout<<"Class Creat"<<endl;
}
class ClassName
{
public:
ClassName();
~ClassName();
void method(char *p);
void show(void)
{
cout<<m_member<<endl;
}
private:
char m_member;
};
void ClassName::method (char *p)
{
int temp;
cin>>temp;
if(temp==1)
{
m_member='a';
}
else
{
m_member=*p;
}
}
ClassName::~ClassName ()
{
cout<<"Class Destroy/n";
}
ClassName::ClassName()
{
cout<<"Class Creat"<<endl;
}
派生类(子类)
形式:class SonClass : 继承访问权限FatherClass;
继承访问权限 | 父类成员的访问权限 | 子类成员的访问权限 |
public | public | public |
public | protected | protected |
public | private | 不可访问 |
protected | public | protected |
protected | protected | protected |
protected | private | 不可访问 |
private | public | private |
private | protected | private |
private | private | 不可访问 |
运算符重载
1类运算符
2友元运算符
2友元运算符
类运算符重载的形式:
类型(即返回值) 类名::operator 重载运算符(参数表)
类型(即返回值) operator 重载运算符(参数表)
其中1)为在类外定义运算符,2)为在类内定义的运算符
类型(即返回值) 类名::operator 重载运算符(参数表)
类型(即返回值) operator 重载运算符(参数表)
其中1)为在类外定义运算符,2)为在类内定义的运算符
【例如】
//----------------main.c的内容--------------------//
#include <iostream.h>
#include "main.h"
void main()
{
ClassName test;
char *pch;
int *pi;
pi = new int(22);
cout<<*pi<<"/n";
pch = new char('b');
cout<<"please input a number/n";
test.method(pch);
test.show();
NewClass a,b;
a.ClassInit();
b.ClassInit();
if(a==b)
{
NewClass val;
val=a+b;
val.showtwo();
}
delete pch;
delete pi;
}
#include <iostream.h>
#include "main.h"
void main()
{
ClassName test;
char *pch;
int *pi;
pi = new int(22);
cout<<*pi<<"/n";
pch = new char('b');
cout<<"please input a number/n";
test.method(pch);
test.show();
NewClass a,b;
a.ClassInit();
b.ClassInit();
if(a==b)
{
NewClass val;
val=a+b;
val.showtwo();
}
delete pch;
delete pi;
}
//----------------main.h的内容--------------------//
class ClassName
{
public:
void method(char *p);
void show(void)
{
cout<<m_member<<endl;
}
private:
char m_member;
};
void ClassName::method (char *p)
{
int temp;
cin>>temp;
if(temp==1)
{
m_member='a';
}
else
{
m_member=*p;
}
}
class NewClass : public ClassName
{
public:
void ClassInit(void)
{
m_a=2;
m_b=3;
}
void showtwo(void)
{
cout<<"a = "<<m_a<<endl;
cout<<"b = "<<m_b<<endl;
}
NewClass operator +(const NewClass &other);
bool operator ==(const NewClass &other)
{
if(m_a==other.m_a && m_b==other.m_b)
{
return true;
}
else
{
return false;
}
}
private:
int m_a;
int m_b;
};
NewClass NewClass::operator +(const NewClass &other)
{
NewClass temp;
temp.m_a = m_a*other.m_a;
temp.m_b = m_b*other.m_b;
return temp;
}
class ClassName
{
public:
void method(char *p);
void show(void)
{
cout<<m_member<<endl;
}
private:
char m_member;
};
void ClassName::method (char *p)
{
int temp;
cin>>temp;
if(temp==1)
{
m_member='a';
}
else
{
m_member=*p;
}
}
class NewClass : public ClassName
{
public:
void ClassInit(void)
{
m_a=2;
m_b=3;
}
void showtwo(void)
{
cout<<"a = "<<m_a<<endl;
cout<<"b = "<<m_b<<endl;
}
NewClass operator +(const NewClass &other);
bool operator ==(const NewClass &other)
{
if(m_a==other.m_a && m_b==other.m_b)
{
return true;
}
else
{
return false;
}
}
private:
int m_a;
int m_b;
};
NewClass NewClass::operator +(const NewClass &other)
{
NewClass temp;
temp.m_a = m_a*other.m_a;
temp.m_b = m_b*other.m_b;
return temp;
}
虚函数
在基类中只声明虚函数,而不给出具体的定义,将它的具体定义放在各派生类中,这种虚函数称为纯虚函数。这样就可以通过基类指针调用所有派生类的虚函数。基类仅作为一个接口,具体功能在派生类中实现。声明了纯虚函数的类称为抽象类。
纯虚函数的声明形式如下:
virtual 函数类型(即返回值) 函数名(参数表)=0;
纯虚函数的声明形式如下:
virtual 函数类型(即返回值) 函数名(参数表)=0;
【例如】
//----------------main.c的内容--------------------//
#include <iostream.h>
#include "main.h"
void main()
{
AbstractClass *p;
InstanceClass c;
p=&c;
int temp;
temp = p->function();
cout<<temp<<endl;
}
#include <iostream.h>
#include "main.h"
void main()
{
AbstractClass *p;
InstanceClass c;
p=&c;
int temp;
temp = p->function();
cout<<temp<<endl;
}
//----------------main.h的内容--------------------//
class AbstractClass
{
public:
virtual int function(void)=0;
};
class InstanceClass : public AbstractClass
{
public:
int function(void)
{
return 38;
}
};
class AbstractClass
{
public:
virtual int function(void)=0;
};
class InstanceClass : public AbstractClass
{
public:
int function(void)
{
return 38;
}
};
Windows API 分类
服务 | 文件 |
内核服务 | Kernel.dll |
图形设备接口 | Gdi32.dl |
网络服务 | Mpr.dll、Wininet.dll、Winsock32.dll |
多媒体服务 | Winmm.dll |
客户/服务方式存取服务 | Advapi32.dll |
版本服务 | Version.dll |
公共对话框服务 | Comdlg32.dll |
打印管理服务 | Winspool.drv |
解压缩与压缩文件服务 | Lz32.dll |
VS6.0中有一个叫WIN32API.CSV的文件可以通过它浏览Windows各版本下API函数的原型说明
内核服务API
1. 文件管理内核服务
VC对文件进行操作的4种方式
a) 利用C语言中的fopen(), fread()等基本函数
b) C++中利用fstream中的函数进行操作
c) 使用CFile类进行操作
d) 使用文件API进行操作
VC对文件进行操作的4种方式
a) 利用C语言中的fopen(), fread()等基本函数
b) C++中利用fstream中的函数进行操作
c) 使用CFile类进行操作
d) 使用文件API进行操作
1)文件操作
CopyFile(),MoveFileEx(),DeleteFile()
2)驱动器操作
GetLogicalDrives(),GetLogicalDriveStrings(),GetDriveType()
2. 进程操作内核服务
1) 进程的创建
CreateProcess()
3. 计算机系统信息内核服务
GetComputerName(),GetSystemInfo(),GlobalMemoryStatus()
CopyFile(),MoveFileEx(),DeleteFile()
2)驱动器操作
GetLogicalDrives(),GetLogicalDriveStrings(),GetDriveType()
2. 进程操作内核服务
1) 进程的创建
CreateProcess()
3. 计算机系统信息内核服务
GetComputerName(),GetSystemInfo(),GlobalMemoryStatus()