计算机图形学基础教程--个人笔记--第二章MFC绘图基础

参考教材:计算机图形学基础教程(Visual C++版)(第二版)

面向对象程序设计基础(Visual C++)

类的定义
格式:

class 类名
{
public:
	成员变量和成员函数的声明;
private:
	成员变量和成员函数的声明;
protected:
	成员变量和成员函数的声明;
}
//一般将类的声明与成员函数分开定义,在类内声明成员函数,
在类外定义成员函数。成员函数名前必须使用类名和作用域运
算符::来指定归属,否则该函数将被认为是不属于任何类的普
通函数

权限控制符:public、private、protected
public表示公有成员,其成员可以被类内和类外的函数自由访问;
private表示私有成员,只有类自己的成员函数或友元函数可以访问,不加访问权限控制符的成员都默认为私有成员;
protected表示保护成员,除类自己的成员函数、友元函数外,派生类的成员函数也可以访问

类成员函数的定义
格式

类型说明符 类名::成员函数名(<参数表列>)
{
	函数体;
}

对象的定义
格式:

类名 对象列表(<参数表列>);

构造函数与析构函数
**都没有数据类型和返回值,且不需要用户显式调用,由系统创建和撤销
**构造函数与析构函数事负责对象的创建和撤销的特殊成员函数。
**构造函数的作用是创建对象时对成员变量进行初始化,析构函数的作用是撤销对象时清理对象占用的内存空间。
**构造函数的名称与类名相同,析构函数的名称是由构造函数名称加上位取反运算符“~”构成。
**构造函数可以有参数,能够重载,析构函数没有参数,不能重载
**一个类可以有多个构造函数,但只能由一个析构函数
**只要类内定义了一个构造函数,不管这个构造函数是否带有参数,C++就不在提供默认构造函数
习惯用大写C字母开始的标识符作为类名,这也是MFC的类命名规则

上机步骤

在VC++中使用 Win32 Console Application方式调试程序
计算机图形学基础教程--个人笔记--第二章MFC绘图基础_第1张图片
计算机图形学基础教程--个人笔记--第二章MFC绘图基础_第2张图片

#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<<"第一个节点的扫描线位置是:"		//输出当前指针的扫描线位置
		<ScanLine<pNext=new CBucket;			//为当前指针的pNext指针新建结点
	pCurrentB=pCurrentB->pNext;				//将当前指针指向新建结点
	pCurrentB->ScanLine=2;					//当前结点的扫描线是2
	cout<<"第二个节点的扫描线位置是:"		//输出当前指针的扫描线位置
		<ScanLine<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<<"创建派生类对象"<volume()<

MFC上机操作步骤

新建
计算机图形学基础教程--个人笔记--第二章MFC绘图基础_第3张图片
单文档
计算机图形学基础教程--个人笔记--第二章MFC绘图基础_第4张图片
目录结构
计算机图形学基础教程--个人笔记--第二章MFC绘图基础_第5张图片计算机图形学基础教程--个人笔记--第二章MFC绘图基础_第6张图片计算机图形学基础教程--个人笔记--第二章MFC绘图基础_第7张图片

你可能感兴趣的:(计算机图形学)