参考教材:计算机图形学基础教程(Visual C++版)(第二版)
面向对象程序设计基础(Visual C++) 类的定义
格式:
class 类名
{
public:
成员变量和成员函数的声明;
private:
成员变量和成员函数的声明;
protected:
成员变量和成员函数的声明;
}
//一般将类的声明与成员函数分开定义,在类内声明成员函数,
在类外定义成员函数。成员函数名前必须使用类名和作用域运
算符::来指定归属,否则该函数将被认为是不属于任何类的普
通函数
权限控制符:public、private、protected
public表示公有成员,其成员可以被类内和类外的函数自由访问;
private表示私有成员,只有类自己的成员函数或友元函数可以访问,不加访问权限控制符的成员都默认为私有成员;
protected表示保护成员,除类自己的成员函数、友元函数外,派生类的成员函数也可以访问
类成员函数的定义
格式
类型说明符 类名::成员函数名(<参数表列>)
{
函数体;
}
对象的定义
格式:
类名 对象列表(<参数表列>);
构造函数与析构函数
**都没有数据类型和返回值,且不需要用户显式调用,由系统创建和撤销
**构造函数与析构函数事负责对象的创建和撤销的特殊成员函数。
**构造函数的作用是创建对象时对成员变量进行初始化,析构函数的作用是撤销对象时清理对象占用的内存空间。
**构造函数的名称与类名相同,析构函数的名称是由构造函数名称加上位取反运算符“~”构成。
**构造函数可以有参数,能够重载,析构函数没有参数,不能重载
**一个类可以有多个构造函数,但只能由一个析构函数
**只要类内定义了一个构造函数,不管这个构造函数是否带有参数,C++就不在提供默认构造函数
习惯用大写C字母开始的标识符作为类名,这也是MFC的类命名规则
上机步骤 在VC++中使用 Win32 Console Application方式调试程序
文章图片
文章图片
#include
class CRectangle//定义长方形类
{
public:
CRectangle();
//声明默认构造函数
CRectangle(int width,int height);
//声明带参构造函数
~CRectangle();
//声明析构函数
double perimeter();
//声明计算周长成员函数
double area();
//声明计算面积成员函数
private:
int width;
//声明长方形的宽度成员变量
int height;
//声明长方形的高度成员变量
};
CRectangle::CRectangle()//定义默认构造函数
{
width = 10;
height = 5;
cout<<"建立默认对象"<width = width;
this->height = height;
}
CRectangle::~CRectangle()//定义析构函数
{
cout<<"撤销对象"<perimeter()<area()<
对象的动态建立与释放 C++程序的内存空间通常分为4个区
全局数据区:全局变量、静态数据、常量
代码区:所有类成员函数,非成员函数
栈区:为运行函数而分配的局部变量、函数参数、返回数据、返回地址等
堆区(自由存储区):其他空间
操作堆区内存时,如果分配了内存,就有责任回收,否则运行的程序会造成内存泄漏
静态对象,占用的存储空间不能随时释放,只有在主函数结束时才调用析构函数予以撤销
动态存储分配,在程序运行时,系统根据运行时的要求进行内存分配,这种方式称为动态存储分配;在堆区中进行;对象生命周期结束时,需要显示释放所占用的内存空间
建立对象格式:
类名 *指针变量名 = new 类名(初始化式);
释放对象格式:
delete指向该对象的指针变量名;
new在堆区动态分配指定大小的内存空间后,返回一个指向该对象的指针,即所分配的存储空间的起始地址
静态对象可以使用对象名,也可以使用指向对象的指针来访问对象
使用new运算符建立的动态对象时无名对象,不能使用对象名访问,只能使用指针访问。
动态对象使用完毕后,要使用delete运算符释放堆区所占用的内存空间,也就是撤销该对象,称动态内存释放。建立长方形类CRectangle动态对象:
CRectangle *pRect = new CRectangle;
释放动态对象:
delete pRect;
//此时释放了指针所指向的对象的内存空间,但指针pRect本身并没有撤销,还需要将其置空
创建带参动态对象:
CRectangle *pRect = new CRectangle(40,10);
一维对象数组动态内存的分配与释放
一维对象数组的内存分配格式:
类名 *指针变量名 = new 类名[下标表达式];
一维对象数组的内存释放格式:
delete [] 指向该数组的指针变量名;//括号不能丢,括号内无内容
包含两个元素的CRectangle类一维动态对象数组:
CRectangle *pRect = new CRectangle[2];
delete []pRect;
二维对象数组动态内存的分配与释放
二维数组可以堪称一种特殊的一维数组,他的元素又是一维数组
CRetangle R[2][3];
可以看成一个一维数组,它有2个元素,每个元素又是包含3个元素的一维数组。
R是二维数组的首地址,称为行指针;R[0],R[1]是2个一维数组的第0列元素的地址,称为列指针。
二维对象数组的内存分配格式:
类名 *指针变量名 = new 类名[行下标表达式];
for(int i=0; i<行下标表达式; i++)
{
指针变量名[i] = new 类名[列下标表达式];
}
二维对象数组的内存释放格式:
for(int i=0; i<行下表表达式; i++)
{
delete []指针变量名[i]; //释放先列后行
}
delete []指针变量名;
***由堆区创建的对象数组,只能调用默认的构造函数,不能调用其他任何构造函数。如果没有默认的构造函数,则不能创建对象数组。
继承与派生 格式:
class 派生类名: [继承方式]基类名
{
派生类新增加的成员;
};
继承方式:公有继承public、私有继承private(默认)和保护继承protected
派生类成员包括从基类继承过来的成员函数和成员变量,及新增的成员
派生类构造函数的定义
格式:
派生类构造函数名(总参数表列):基类构造函数名(参数表列)
{派生类中新增成员变量初始化语句}
动态创建CRectangle类二维对象数组
void main()//动态创建CRetangle类二维对象数组,假设数组2*3
{
int RowIndex=2,ColIndex=3;
//设置二维数组行下标和列下标
CRectangle **pRect;
//创建二维动态数组
pRect=new CRectangle * [RowIndex];
//设置行
for(int i=0;
i
创建一个桶类,成员变量ScanLine为扫描线的位置,pNext为指向下一节点的指针
#include
class CBucket//定义桶类
{
public:
int ScanLine;
//声明扫描线位置
CBucket *pNext;
//声明指向下一桶的结点的指针
};
void main()
{
CBucket *pHead=new CBucket,*pCurrentB;
//定义桶结点的头指针和桶结点的当前指针
pCurrentB=pHead;
//当前指针为桶结点的头指针,开始给第一个结点赋值
pCurrentB->ScanLine=1;
//当前结点的扫描线是1
cout<<"第一个节点的扫描线位置是:"//输出当前指针的扫描线位置
pNext=new CBucket;
//为当前指针的pNext指针新建结点
pCurrentB=pCurrentB->pNext;
//将当前指针指向新建结点
pCurrentB->ScanLine=2;
//当前结点的扫描线是2
cout<<"第二个节点的扫描线位置是:"//输出当前指针的扫描线位置
pNext=NULL;
//只构造两个结点,第二个结点的pNext指针置空
delete pHead;
//释放头指针所指向的内存空间
delete pCurrentB;
//释放当前指针所指向的内存空间
pHead=NULL;
//头指针置空
pCurrentB=NULL;
//当前指针置空
}
从已有长方形类CRectangle继承出长方体类CCuboid
#include
class CRectangle//定义长方形类,基类
{
public:
CRectangle();
//声明默认构造函数
CRectangle(int width,int height);
//声明带参构造函数
~CRectangle();
//声明析构函数
double perimeter();
//声明计算周长成员函数
double area();
//声明计算面积成员函数
protected:
int width;
//声明长方形的宽度成员变量
int height;
//声明长方形的高度成员变量
};
CRectangle::CRectangle()//定义默认构造函数
{
cout<<"建立默认对象"<width = width;
this->height = height;
cout<<"建立基类对象"<length=length;
cout<<"创建派生类对象"<
MFC上机操作步骤 【计算机图形学基础教程--个人笔记--第二章MFC绘图基础】新建
文章图片
单文档
文章图片
目录结构
文章图片
文章图片
文章图片