cin.get();
return0;
}
解决方法
int*myballs=newint;
*myballs=8;
这样定义了一个int型的指针同时将对应单元的内容赋值为8。
4,结构体
structstudent_info
{
stringstrname;
intchinease;
};
student_info是一个结构体类型,而不是结构变量。
对于结构体赋值可以在初始化的时候进行赋值,也可以通过数组分量进行结构体分量的赋值:
student_infostudent[30];student[0].number=1234;
定义一个结构体要注意以下三个部分:
结构体的关键字:
Strut。
表示定义一个结构体
结构体名称:
student_info就是结构体名称
结构体成员:
包括结构体成员strname成为结构体类型student_info结构成员。
5,函数通过指针来调用数组
两种函数通过指针来调用数组的方法
//intfoun_sum(intany[],intnum)
intfoun_sum(int*any,intnum)
6,函数指针
函数在内存中运行,肯定也像数据对象一样,占用一定的内存空间,既然占用了一定的内存空间,那么他也就有一个内存地址,而指向这个内存地址的就是“函数的指针”。
7,类和构造函数的实现
类定义的关键字是class。
表明声明是一个类的声明。
类名。
Studentclass就是一个类名,这个类名是一个抽象概念,表示一个全体学生组成的学生类,而不是具体的某一个学生。
访问控制关键字。
类定义有三种访问控制关键字:
private,public,protected。
使用private关键字外界不可以直接访问,public可以直接访问。
注意:
类的定义式生成这种对象的前提,考虑类的属性和对外接口是类的重点和难点,基本原则是:
尽量让内部的数据和操作私有化,提供简单易用的接口函数,尽量降低类与类之间的耦合度。
实现类的成员函数:
依次是Human.cppmain.cppHuman.h文件
显然以上这种模块化编程很实用,但是这个程序存在缺陷,因为我们无法对类成员中的变量进行赋值和改变,因此采用类中构造函数,并在对应函数体进行初始化如下图所示:
实现类的成员函数:
依次是Human.cppmain.cppHuman.h文件
使用类的构造函数方法并再函数体内进行初始化对改变类中private类型的成员变量是一个很好的方法,但是这种方法并不是万能的。
假设sex属性定义为常量,即将一个人的性别看成自出生到死亡都是不变的:
Constintsex;//性别是对象生成到销毁都是不变的
如果这样定义,上述所说的两个重载版本的构造函数都不能编译通过,原因在于以下两条语句的操作对于常量来说是不允许的:
sex=Sex;
sex=1;
常量不能作为赋值号的左操作数是基本常识。
C++有一个特殊的类初始化方法:
成员初始化列表法。
改写类的构造函数如下:
//利用构造函数实现对“人”类的成员变量初始化和修改
human_info:
:
human_info(stringname,unsignedintAGE,intSex,unsignedintHeight,unsignedintWeight):
strname(name),age(AGE),sex(Sex),hight(Height),weight(Weight)
{
}//带参数的构造函数的成员初始化列表实现
human_info:
:
human_info():
strname(“Generablepeople”),age(20),sex
(1),hight(176),weight(70)
//不带参数的构造函数成员初始化列表实现。
注意:
变量的初始化和赋值有两种形式:
object=2和object=
(2);在成员初始化列表方法中只能使用object
(2)这一种形式,因此作为常量的sex也可以顺利初始化
析构函数:
~human_info();
析构函数与构造函数相比较,在函数名称前面多了一个~符号,该符号也是析构函数名的一部分。
除了该符号以外,也要和类的名称相同。
由于“人”类中没有对内存做动态内存分配,因此在该类中的析构函数的函数体可以为空或者不定义析构函数。
8,运算符重载函数
格式:
<函数类型><关键字operator><运算符号>(形参类型&形参变量)
{
函数体;
Return;
}
注意:
运算符重载函数的实现在对应的.CPP文件中实现,但是要明白运算符重载函数要在.h文件中要声明。
以下是运算符重载函数的例子:
图片依次是vector.h,vector.cpp,main.cpp文件
第五章
5.1对话框
通过右键属性,可已进行修改按键的名称属性等操作。
为edit控件添加类的成员变量:
首先,右击鼠标“edit”控件,选择“classwizard”选项,再单击的对话框中选择“MemberVariables”选项卡,选中“IDC_EDIT”,然后单击“AddVariables”按钮,单击后会出现单元名称和数据类型。
添加按钮控件消息处理函数:
双击“+,-,*,/”对话框,会弹出一个对话框来设置该控件的纤细处理函数函数名称,可以直接默认。
例程:
voidCDialog1:
:
OnButton1()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData
(1);
m_results=m_data1+m_data2;
UpdateData(0);
}
注意函数:
UpdateData()函数,该函数接受的参数是一个布尔型的变量,接受的参数不同,则对控件和数据交换的作用就不同:
True:
将控件上的数据读取到变量中去。
False:
将变量中的数据写到空间中。
UpdateData()函数是必要的,如果没有,则空间中的数值和变量的数值不能正常的交互。
5.2模式对话框的创建和使用:
1,对话框的添加,在资源视图中右键点击Dialog选择InsertDialog命令。
2,为新建的对话框添加类:
点击主菜单中的insertnewclass,在弹出的对话框中要进行一些列的设置,首先是ClassType:
一般设置为MFCClass。
然后进行类的命名,例如:
Cdialog1,,然后是DialogID选择为IDD_DIALOG1,基类选择是Cdialog。
注意:
对话框和类的关系与对话框里的控件和源程序之间的关系是类似的,对话框要通过ID,然后使用类来绑定这个ID,这样,对话框和类(源程序)就联系在一起了。
3,在主框架菜单中添加触发对话框的菜单项,首先打开Menu文件夹中的IDR_MAINFRAME资源,然后双击菜单列表中的空白处。
弹出的对话框用来设置新建菜单的标题和ID。
4,为新建的菜单添加消息处理函数,右击新添加的菜单,选择classwizard选项,其次在弹出的对话框中选择MessageMaps选择新建对象的ID编号,消息选择COMMAND然后单击AddFunction按钮。
最后添加默认的消息处理函数例如:
OnDlg(),并再XXMainFirm.cpp函数中添加#include<新建类的.h>和响应的消息处理函数,例程代码如下:
#include"Dialog1.h"
voidCMainFrame:
:
OnDlg1()
{
//TODO:
Addyourcommandhandlercodehere
CDialog1dlg;//创建CDialog1类对象dlg
if(!
dlg.DoModal())//调用dlg对象的DoModal()函数创建模式对话框
{
return;
}
}
5.3Windows通用对话框
所谓的Windows通用对话框,就是指Windows提供的一组标准用户界面对话框,而在MFC中也有相应的功能支持对话框的开发。
通用对话框类
用途
CFileDialog
打开或者保存一个文件夹
CCcolorDialog
选择或者创建颜色
CFindReplaceDialog
文字替换对话框
CPageSetupDialog
界面参数对话框
CFontDialog
选择自体对话框
CPrintDialog
设置打印机并打印文档
以CfileDialog为例子;创建MFC应用程序(单文档),然后点击MenuIDR_MAINFRAME,点击编辑添加‘通用对话框-文件’,双击进行命名和命名ID。
最后右击‘通用对话框-文件’点击ClasswizardMessageMaps—>命名IDCOMMANDAddFunction,然后再MainFirm.cpp添加如下代码:
下面以CfileDialog为例子,历程代码如下:
voidCMainFrame:
:
OnWenjianjia()
{
//TODO:
Addyourcommandhandlercodehere
CFileDialogdlgFile(TRUE,"txt","*.txt");
if(dlgFile.DoModal())
{
return;
}
}
CFileDialogdlgFile(TRUE,"txt","*.txt");//CfileDialog类的构造函数接受3个参数,其中第一个参数是选择打开还是保存,TRUE时打开,FALSE是保存