VC++中为什么要用类?包括派生类,为什么要派生?
用一般的函数中不能解决这个问题吗?为什么一定要用类呢?并且一个类还不行?还要派生一系列的类??为什么呢?谢谢各位大虾啊...
用一般的函数中不能解决这个问题吗?为什么一定要用类呢?并且一个类还不行?还要派生一系列的类??为什么呢?
谢谢各位大虾啊 展开
谢谢各位大虾啊 展开
4个回答
展开全部
这个问题说起来挺复杂的,不过值得庆幸的是,在大多数C++语言教材里,都有明确的阐述,如《The C++ Programming Language》《C How To Program》,建议你看一下。如果不太方便,我也很乐意阐述一下我的理解,因为不想复制网上的,有欺骗楼主的感觉。
举个例子,建立一个基类:SHAPE,即“图形类”
类SHAPE里,含有几个纯虚函数,例如Draw()用来绘制图形,故类SHAPE称为“抽象基类”,因为它不能创建任何对象,类SHAPE实在太过笼统,什么叫“图形”?这可太多啦!既然SHAPE不能用来声明对象,所以他的成员函数,也是纯虚函数的Draw()亦没有定义!
但是,我们可以从SHAPE派生出类Circle、类Rectangle……并且在这些新类里,定义抽象基类SHAPE里没有定义的纯虚函数Draw(),之所以现在可以定义,因为Circle和Rectangle已经是具体的类,他们可以声明对象,比如前者声明一个“圆”,后者声明一个“矩形”,我们当然可以用Draw()函数来描绘圆和矩形。
类有结构体所不具备的优点:信息隔离!只要类的接口不变,不论外界怎么变,类的内部不受影响;反之亦然!
之所以要派生,这要涉及“多态性”这个概念。简单说,当程序非常复杂时,我们可能会用指针来操纵类;这时,如果使用一个基类的指针来操纵的话,会容易很多;若结合我开始举的例子,那就是用SHAPE的指针来操纵Circle和Rectangle的对象,要好于使用后面两个派生类的指针操纵他们各自的对象!要问原因,说来话长,还是自己看书吧。
所以,我们既要有基类,也要有派生类。可以简化程序,易于调试、改错。如果你能接触一些大型复杂的程序,就会感受到C++的类有多么强大和有用!
举个例子,建立一个基类:SHAPE,即“图形类”
类SHAPE里,含有几个纯虚函数,例如Draw()用来绘制图形,故类SHAPE称为“抽象基类”,因为它不能创建任何对象,类SHAPE实在太过笼统,什么叫“图形”?这可太多啦!既然SHAPE不能用来声明对象,所以他的成员函数,也是纯虚函数的Draw()亦没有定义!
但是,我们可以从SHAPE派生出类Circle、类Rectangle……并且在这些新类里,定义抽象基类SHAPE里没有定义的纯虚函数Draw(),之所以现在可以定义,因为Circle和Rectangle已经是具体的类,他们可以声明对象,比如前者声明一个“圆”,后者声明一个“矩形”,我们当然可以用Draw()函数来描绘圆和矩形。
类有结构体所不具备的优点:信息隔离!只要类的接口不变,不论外界怎么变,类的内部不受影响;反之亦然!
之所以要派生,这要涉及“多态性”这个概念。简单说,当程序非常复杂时,我们可能会用指针来操纵类;这时,如果使用一个基类的指针来操纵的话,会容易很多;若结合我开始举的例子,那就是用SHAPE的指针来操纵Circle和Rectangle的对象,要好于使用后面两个派生类的指针操纵他们各自的对象!要问原因,说来话长,还是自己看书吧。
所以,我们既要有基类,也要有派生类。可以简化程序,易于调试、改错。如果你能接触一些大型复杂的程序,就会感受到C++的类有多么强大和有用!
展开全部
看来你还没搞清楚类和函数之间的关系.
类是相似对象的集合。它描述了一组有相同特性的对象及在这些对象上共有的相似行为.
比如 猫,狗 就是类.
函数只是一个封装好的操作,一个具有独立功能的模块.
比如说:y=x+1;y=x-2把它描述为函数就是y=f(x).
使用类,可以对程序进去模块化,简化了程序的复杂程度.
而在一个程序中,类的使用是依据程序来设计的,不是说一定要用或者用多个类什么的.
类是相似对象的集合。它描述了一组有相同特性的对象及在这些对象上共有的相似行为.
比如 猫,狗 就是类.
函数只是一个封装好的操作,一个具有独立功能的模块.
比如说:y=x+1;y=x-2把它描述为函数就是y=f(x).
使用类,可以对程序进去模块化,简化了程序的复杂程度.
而在一个程序中,类的使用是依据程序来设计的,不是说一定要用或者用多个类什么的.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
使用类,可以对程序进去模块化,简化了程序的复杂程度。
类中封装了很多功能函数,类可以提供接口去调用这些函数。
而类与类之间存在着很多关系,例如:派生类
类中封装了很多功能函数,类可以提供接口去调用这些函数。
而类与类之间存在着很多关系,例如:派生类
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这涉及到的东西很多了,呵呵。我是讲不了
这主要是面向对象编程和面向过程编程的问题了。
面向对象编程应该是编程发展的方向吧。
使得编程更加自然
这主要是面向对象编程和面向过程编程的问题了。
面向对象编程应该是编程发展的方向吧。
使得编程更加自然
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |