C++面向对象程序设计语言是在C语言的基础上发展起来的,它与传统的程序设计方式不同,而是一种新的程序设计范型。它对降低软件的复杂性,改善其重要性和维护性、提高软件的生产效率,有着十分重要的意义。因此面向对象程序设计被普遍认为是程序设计方法的一场实质性的革命。
Visual C++支持面向对象程序设计,是Microsoft公司推出的目前应用最为广泛的基于Windows平台的可视化编程工具。
我们将用Visual C++的强大功能开发Windows应用程序,设计完成色彩亮丽的可移动的图形图像及千变万化的文字信息和广泛流行的企事业管理、银行、电信、商业、教育、游戏等众多的实用软件。
1.1 C程序和C++程序
我们有C和C++编程基础后,才能更好的运用Visual C++编程工具开发Windows应用程序。下面我们先用C语言、C++语言编写一个同样的显示学生信息程序,回顾和熟练一下它们的编程方法,这将对我们学好Visual C++程序设计起到促进作用。
例1 用C语言编写显示学生信息程序
双击VC系统FileNewFileC++source File右边File处写你要建的文件名:学生信息1在其下面的Location即路径名处写:e:\vcpp(事先建好的文件夹)ok,如图1.1.1所示,在出现的界面(文档窗口)上你可敲入C程序,之后单击BuildBuild是是 !(编译运行),便出现图1.1.2的结果。敲入的C程序如下:
#include <stdio.h> #include <string.h> struct student //定义结构体类型student { long num; //学号 char name[20]; //年龄 char sex[10]; //性别 float score; //成绩 }stu,*p; // 直接定义student结构体类型变量stu和student结构体类型指针*p int main() { p=&stu; //student结构体的起始地址赋给指针变量p stu.num=89101; //将学号赋给stu结构体变量中的成员num中 strcpy(stu.name,”李明”); //将姓名赋给stu结构体变量中的成员name strcpy(stu.sex,”男”); //将姓别赋给stu结构体变量中的成员sex stu.score=89.5; // 将成绩赋给stu结构体变量中的成员score //以下2个printf函数输出的结果是相同的。 printf(”学号 No.:%ld\n姓名 name:%s\n性别 sex:%s\n成绩 score:%2.1f\n”, stu.num,stu.name,stu.sex,stu.score); //stu.num表示stu结构体变量中的成员num printf(”\n学号 No.:%ld\n姓名 name:%s\n性别 sex:%s\n成绩 score:%2.1f\n”, p->num,p->name,p->sex,p->score); //p->num是代替(*p).num的书写形式,也就是p->num 等价于(*p).num,它表示p指向结构 //体变量stu中的成员num return 0; } |
例2 用C++编写显示学生信息程序
(1)双击VC系统FileNewprojectsWin32 Console ApplicatorProject name处写文件名:学生信息2,下面Location(路径名)处写e:\vcppokfinishok
(2)再在主菜单处点File NewFile选中C++ Source,右边Add to Project处显示出你刚才敲的文件名File处写:学生信息2.cppok,如图1.1.3所示。
在出现的窗口界面(文档窗口)上,你可敲入C++程序。再单击BuildBuild(编译运行), 结果如图1.1.4所示。敲入的C++程序如下:
#include <string.h> #include <iostream.h> class student //定义类(class) student { private: //私有模式 public: //公共模式 long num; //学号 char name[20]; //年龄 char sex[10]; //性别 float score; //成绩 void sc(); //输出函数 protected: //保护模式 }; void student::sc() { student stu; student *p=&stu; stu.num=89101; strcpy(stu.name,”李明”); strcpy(stu.sex,”男”); stu.score=89.5; //以下2种输出结果都是相同的 cout<<”学号 No: “<<stu.num<<”\n”; cout<<”姓名 name: “<<stu.name<<”\n”; cout<<”性别 sex: “<<stu.sex<<”\n”; cout<<”成绩 score: “<<stu.score<<”\n\n”; cout<<”学号 No: “<<p->num<<”\n”; cout<<”姓名 name: “<<p->name<<”\n”; cout<<”性别 sex: “<<p->sex<<”\n”; cout<<”成绩 score: “<<p->score<<”\n\n”; } void main() //主函数 { student xx; //定义student类的对象xx xx.sc(); //sc()是xx的成员函数,xx.sc()是表示执行xx的成员函数sc() } |
我们看到,C语言是先定义结构体和结构体变量、结构体指针,之后在主函数main()里用结构体变量和结构体指针输出其变量内容。C++是先定义类,在主函数里用类定义对象,再通过对象里的成员函数输出其变量内容。C和C++的最大区别是C++定义的类里可以有成员函数,通过成员函数完成所要完成的工作,在程序结构上有了深刻变化,是面向对象的。 而C的结构体里不能定义函数,它不具备类的功能,程序结构是面向过程的。因此C语言编程要比C++复杂得多,效率也低得多。
1.2 Visul C++程序
在Visual C++ 6.0中,用MFC AppWizard(MFC 应用程序向导)可以方便地创建一个Windows单文档应用程序,来实现如上显示学生信息的目的。
例3 用Visul C++ 编写显示学生信息程序
(1)双击桌面上的Microsoft Visual C++系统:
File New Projects MFC AppWizard(exe) Location:处输入路径名:vcpp
Project name:敲入文件名:“学生信息3”OK,见图1.2.1
(2)选中SDI(单文档)Finish 便建立了一个名为:“学生信息3”的单文档应用程序。
(3)你点击项目工作区的FileView点开Source Files双击“学生信息3 View.cpp”
在该类(视图类)的OnDraw函数中敲入如下代码:
void CMyView::OnDraw(CDC* pDC) { CMyDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); CString num=”89101″; //学号 CString name=”李明”; //姓名 CString sex=”男”; //性别 CString score=”89.5″; //成绩 pDC->TextOut(20,20,”学号 num: “); pDC->TextOut(110,20,num); pDC->TextOut(20,40,”姓名 name: “); pDC->TextOut(110,40,name);//输出姓名 pDC->TextOut(20,60,”性别 sex: “); pDC->TextOut(110,60,sex); //输出性别 pDC->TextOut(20,80,”成绩 score: “); pDC->TextOut(110,80,score);//输出成绩 } |
说 明:
1、OnDraw(CDC *pDC):函数(函数也叫对象方法)是视图类中的显示函数。
2、CDC:是FMC的设备环境类,CDC *pDC是定义CDC类的指针对象。
3、CMyDoc *pDoc:定义文档类的指针对象,GetDocument()函数是获得文档类指针。
4、CMyDoc* pDoc = GetDocument():是将文档类首地址赋给文档类指针*pDoc.
5、ASSERT_VALID(pDoc) :该宏用来在运行时检查一个对象的内部合法性,这里是测试获得的文档类指针。
6、CString:是处理文本串的类,它能将字符串处理为字符数组。
7、TextOut(x,y,str):是CDC类的显示函数,参数x,y是字符串在窗口中的显示位置(x y坐标),str是以上已定义和赋好值的字符串。