您现在的位置:中国下载站学院中心网络编程CC++教程 → 文章列表

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

作者:佚名  来源:不详  发布时间:2007-4-3 23:36:59   

减小字体 增大字体

 
 

  软件开发是一个极其复杂的过程,一段小的代码我们可以快速、准确的完成,但是当你面对的是一个庞大的软件系统的时候,你是否有不知所措的感觉呢?

  在我们使用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] = '''''''';
   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定律与上面的结构非常类似:

[责任编辑:cndownzcom]

  对象 = (算法 + 数据结构)

  程序 = 对象 + 对象

  表面上似乎二者之间并没有太大的差别,但就是这个差别为我们带来了巨大的变革。

  有这样一句话:“编程是在计算机中反映世界”,我觉得再贴切不过,面向对象(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] = '''''''';
    math    = 0;
    chinese  = 0;
    total   = 0;
  }
  
  void Student::InputData()
  {
    ///////////////////////////////////////
    //获取输入
    cout<<"enter name"<<endl;
    cin>>strname;
    cout<<"enter math"<<endl;
    cin>>math;
    cout<<"enter chinese"<<endl;
    cin>>chinese;
  
    //////////////////////////////////////
    //计算总分
    total = math + chinese;
  }
  
  void Student::PrintData()
  {
  cout<<strname<<"''''s total mark is:"<<total<<endl;  
  }
  
  int main()
  {
    Student someone;
    someone.InputData();
    someone.PrintData();
  }

[责任编辑:cndownzcom]

  

  我们先不去关心类的实现细节,现在对比一下main函数中的调用过程,每种方法和相应的数据结构联系在了一起,对外部的调用来说,我们不需要去关心数据结构和相应算法的关系,因为他们已经关联在了一起。也许这个例子不够说明问题,也许我的说明含糊不清,但是你想象一下:如果我们对一个物体,比如狗来建模,我们需要确定其属性(颜色、大小)和行为(跑、叫),我们肯定希望这些都与狗这个模型关联在一起:

Class dog
 (属性)
  Color
  Size
 (行为)
  Run
  yelp
如果是结构话的:
Struct dog
  Color
  Size
         (依赖关系)
  Run(dog somedog)   yelp(dog somedog)

  显然后面的结构比较复杂,更不要说缺乏有效的成员属性保护。另外一个面向对象的强大就是继承与多态,下一篇我们再来讨论。

  我希望我前面的表达足够的清楚,面向对象不是这样一篇文章可以描述的清楚的,我这里只是描述了一个发展过程的片面。我希望它能成为一个引子,能够为初学者提供一些帮助。

[责任编辑:cndownzcom]

[上一页][1][2][3]

在百度中搜索更多C++编程杂谈之二:面向对象相关网页 转贴于:中国下载站

  • 上一篇文章:使用random_shuffle()算法随机化序列元素
  • 下一篇文章:关于Visual Basic 9.0的动态标识符
  • 阅读统计:[]
  • 中国下载站】【设为主页】【收藏本页】【打印本文】【回到顶部】【关闭此页

    相关文章
    文章评论(评论内容只代表网友观点,与本站立场无关!)

    用户名: 查看更多评论

    分 值:100分 85分 70分 55分 40分 25分 10分 0分

    内 容:

             (注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码


    设为首页 - 关于我们 - 广告服务 - 网站地图 - 加入收藏 - 网站声明 - 网站帮助 - 友情链接

    • Copyright (C) 2006-2008 www.cndownz.com All Rights Reserved.
      中国下载站 版权所有. 粤ICP备05141802号. 对本站有任何建议、意见或投诉,请来信:cndownzcom@yahoo.com.cn.
      喜欢中国下载站(cndownz.com),请把中国下载站(cndownz.com)告诉你QQ上的5位好友,多谢支持!