当前位置: 首页 > 图文教程 > 开发语言 > VC++ > C++编程杂谈之二:面向对象

VC++
在类VC的界面实现中加入目录树
软件换肤技术在 BCB 中的实现
利用非模窗口生成MDI介面
报表输出轻松搞定
Windows 中不规则窗体的编程实现
解说Win32的窗口子类化
使用测试优先方法开发用户界面
一个简单的登录对话框的实现
一个简单的日记本程序
从资源中加载皮肤
一个在RichEdit中添加表情图象的类
ActiveSkin 4.3 软件换肤在VC中的实现
一种另类“关于(About)”对话框的动态显示方法
对话框打印预览及打印
关于如何换肤、子类化的解决方案
制作 MSN、QQ 的消息提示窗口
如何对 BCGControlBarPro 进行换肤
定制个性化的对话框窗口类
改变窗口中的光标形状
更新MFC中的视图,跟踪.NET Framework中的事件

VC++ 中的 C++编程杂谈之二:面向对象


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 56 ::
收藏到网摘: n/a


C++编程杂谈之二:面向对象
作者/xulion
软件开发是一个极其复杂的过程,一段小的代码我们可以快速、准确的完成,但是当你面对的是一个庞大的软件系统的时候,你是否有不知所措的感觉呢?
在我们使用C的年代里面,编程思想是结构化的,你的C语言老师可能会不断的教导你怎样使用结构化的方法来完成一段程序,同时,你可能也知道在软件开发中的一个重要定律(Wirth定律):
程序 = 算法 + 数据结构
在结构化设计中人们通常是这样来看待这个定律的:
  程序 =(算法) + (数据结构)
例如:(我仍然使用C++标准库来写下面的代码,方便和以后的代码对比)
#include <iostream>using namespace std ;typedef struct Student{ char strname[50]; //姓名 int math; //数学分数 int chinese; //语文 int total; //总分}STUDENT;void InitData(STUDENT* some){ ////////////////////////////////////// //初始化数据 some->strname[0] = ''''\0''''; some->math = 0; some->chinese = 0; some->total = 0;}void InputData(STUDENT* some){ /////////////////////////////////////// //获取输入 cout<<"enter name"<<endl; cin>>some->strname; cout<<"enter math"<<endl; cin>>some->math; cout<<"enter chinese"<<endl; cin>>some->chinese; ////////////////////////////////////// //计算总分 some->total = some->math + some->chinese;}void PrintData(STUDENT some){ cout<<some.strname<<"''''s total mark is:"<<some.total<<endl;}//上面的部分可以单独放在一个头和CPP中main(){ STUDENT someone; InitData(&someone); InputData(&someone); PrintData(someone);} 
到目前为止,程序的划分变得相对简单了,团队的开发才成为可能。在面向对象中,所存在的Wirth定律与上面的结构非常类似:
  对象 = (算法 + 数据结构)
  程序 = 对象 + 对象
  表面上似乎二者之间并没有太大的差别,但就是这个差别为我们带来了巨大的变革。
  有这样一句话:“编程是在计算机中反映世界”,我觉得再贴切不过,面向对象(Object-Oriented)对这种说法的体现也是最优秀的,比如在前面的例子中,我们设计的数据结构是一个学生成绩的表现,而对数据结构的操作(函数)是分离的,虽然这些操作是针对这种数据结构而产生的。为了管理大量的数据,我们不得不小心翼翼地使用它们。
  面向对象中一个重要的概念就是类(class)C++中是它。类和struct数据结构最大的不同就是提供了限制级别(可见性)的保护——我们先抛开复杂的继承与多态不谈。正是通过这种方式,我们可以对数据成员提供非常有效的保护,同时使数据结构更符合现实行为。
  在面向对象的概念中,前面的数据结构表示如下:
  #include   using namespace std;  class Student  {  private:   //属性   char strname[50]; //姓名   int math; //数学分数   int chinese; //语文   int total; //总分  public:  //方法   char* getname(){ return strname; };   int getmath(){ return math; };   int getchinese(){ return chinese; };   int gettotal(){ return total; };   Student();   void InputData();   void PrintData();  };    Student::Student()  {   //////////////////////////////////////   //初始化数据   strname[0] = ''''\0'''';   math = 0;   chinese = 0;   total = 0;  }    void Student::InputData()  {   ///////////////////////////////////////   //获取输入   cout<<"enter name"<<endl;   cin>>strname;   cout<<"enter math"<<endl;   cin>>math;   cout<<"enter chinese"