`
congfeng02
  • 浏览: 200070 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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

阅读更多

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"<<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();
  }
 
  我们先不去关心类的实现细节,现在对比一下main函数中的调用过程,每种方法和相应的数据结构联系在了一起,对外部的调用来说,我们不需要去关心数据结构和相应算法的关系,因为他们已经关联在了一起。也许这个例子不够说明问题,也许我的说明含糊不清,但是你想象一下:如果我们对一个物体,比如狗来建模,我们需要确定其属性(颜色、大小)和行为(跑、叫),我们肯定希望这些都与狗这个模型关联在一起:
Class dog
  (属性)
   Color
   Size
  (行为)
   Run
   yelp
如果是结构话的:
Struct dog
   Color
   Size
                 (依赖关系)
  Run(dog somedog)      yelp(dog somedog)
 
显然后面的结构比较复杂,更不要说缺乏有效的成员属性保护。另外一个面向对象的强大就是继承与多态,下一篇我们再来讨论。
 我希望我前面的表达足够的清楚,面向对象不是这样一篇文章可以描述的清楚的,我这里只是描述了一个发展过程的片面。我希望它能成为一个引子,能够为初学者提供一些帮助。
分享到:
评论

相关推荐

    面向对象编程:C++与Java比较教程 英文版

    本书《面向对象编程:C++与Java比较教程》详细比较和对比了当今最流行的两种编程语言C++和Java,旨在教授互联网时代至关重要的技能和面向对象编程技术。作者Avinash C. Kak凭借其成功教授的课程,撰写了一本全面的...

    c++面向对象编程实例大全

    《C++面向对象编程实例大全》是一本专为初级学习者设计的教程,旨在通过丰富的实例深入浅出地讲解C++的面向对象编程概念。面向对象编程(Object-Oriented Programming,简称OOP)是C++的核心特性,也是现代软件开发...

    c++:面向对象程序设计 李涛编 讲义

    《C++:面向对象程序设计》是李涛编著的一部深入探讨C++编程的教材,主要关注面向对象编程的概念和技术。本讲义包含了多个章节的内容,覆盖了从基础到高级的C++特性,旨在帮助学习者掌握面向对象编程的核心理念。 ...

    c++编程 C++面向对象多线程编程

    c++编程 C++面向对象多线程编程 c++标准程序库

    《C++面向对象程序设计》第2版编程题答案

    《C++面向对象程序设计》是C++编程领域的一本经典教材,由清华大学出版社出版,龚晓庆、付丽娜等多位专家共同编著。这本书深入浅出地讲解了C++语言的核心概念,特别是面向对象编程(OOP)的思想和技术。第二版在第一...

    c++高级编程 C++面向对象多线程编程

    c++高级编程 C++面向对象多线程编程 c++标准程序库.pdf

    面向对象编程C++和Java比较教程 中英文完整版 pdf

    面向对象编程(Object-Oriented Programming,简称OOP)是一种重要的编程范式,它通过将数据和操作数据的方法封装在对象中,实现了程序设计的模块化和抽象化。本教程对比了两种广泛应用的面向对象语言——C++和Java...

    C++面向对象程序设计答案

    面向对象程序设计是计算机科学中的一个重要概念,C++语言是其广泛应用的语言之一。谭浩强教授的《面向对象程序设计》是一本深受学生和初学者欢迎的教材,它详细介绍了C++的基础和面向对象编程的核心概念。这个压缩包...

    面向对象编程C++和Java比较教程

    C++支持类、封装、继承、多态等面向对象特性,并且包含了模板、STL(Standard Template Library)等高级特性,使得它在系统级编程、游戏开发、嵌入式等领域有着广泛应用。 Java,由James Gosling等人在Sun ...

    Visual C++ 面向对象编程教程——王育坚

    《Visual C++ 面向对象编程教程——王育坚》是一本专为学习MFC(Microsoft Foundation Classes)和面向对象编程技术而设计的教学资料。该教程以幻灯片的形式呈现,结合实例与详细的讲解,使得学习过程更为直观且易于...

    C++:面向对象程序设计

    本课程“C++:面向对象程序设计”是针对高级语言程序设计的第二部分,由四川大学计算机学院的专家主讲,旨在帮助学生掌握C++的基础和高级特性。 **1. C++的核心概念** - **类(Class)**:类是C++中面向对象编程的...

    C++面向对象高效编程

    《C++面向对象高效编程》是一本深入探讨C++编程技术的著作,由Kayshav Dattatri撰写,中文版的PDF格式使得国内读者能够更好地理解其内容。这本书主要聚焦于利用C++的面向对象特性进行高效编程,是C++程序员提升技能...

    C++面向对象编程的一些总结

    C++是一种强大的编程语言,以其丰富的特性,尤其是面向对象编程(OOP)而闻名。面向对象编程是一种设计和实现软件的方式,它将现实世界中的实体抽象为类,然后通过对象来表示这些实体。C++的面向对象编程主要包括三...

    (麻省理工免费课程)C语言内存管理和C++面向对象编程

    ### 麻省理工免费课程:C语言内存管理和C++面向对象编程 #### 一、C语言简介 在《麻省理工免费课程:C语言内存管理和C++面向对象编程》这一课程中,首先对C语言进行了介绍。C语言是一种历史悠久且功能强大的编程语言...

    C++面向对象高效编程.part1

    C++面向对象高效编程.part1 C++面向对象高效编程.part1 C++面向对象高效编程.part1

    面向对象技术与C++编程

    C++是一种支持面向对象编程(OOP)的强类型、编译型、通用编程语言,由Bjarne Stroustrup在C语言的基础上发展而来,既具有过程性编程的特点,又引入了面向对象的特性。 标题"面向对象技术与C++编程"表明这组课件...

    095_《Delphi5高级编程丛书之一:IDE与面向对象编程》(5/5)

    本书全面深入地介绍了Delphi 5的集成开发环境、基本编程技巧、项目管理、调试器、Object Pascal语言、动态链接库、与C++共享代码、面向对象编程、VCL的结构、Open Tools API、编写自己的元件和包等内容。Delphi 5是...

    鸡啄米:C++编程入门系列

    鸡啄米:C++编程入门系列之二十三(C++程序设计必知:常引用、常对 象和对象的常成员) 鸡啄米:C++编程入门系列之二十四(C++程序设计必知:多文件结构和 编译预处理命令) 第六部分:数组、指针和字符串 鸡...

    C++面向对象多线程编程

    《C++面向对象多线程编程》是一本深入探讨C++编程技术的书籍,尤其侧重于面向对象设计和多线程编程。对于任何希望提升C++技能,尤其是想要在现代软件开发环境中应用并发处理的开发者而言,这本书都是一份宝贵的学习...

    面向对象思想,c++编程思想

    C++是支持面向对象编程的主流编程语言之一,以其强大的功能和灵活性而备受赞誉。本教程深入剖析了面向对象机制,以及C++的语法细节和使用规则,旨在帮助程序员全面理解和掌握C++编程。 在C++中,面向对象主要体现在...

Global site tag (gtag.js) - Google Analytics