当前位置:编程学习 > C/C++ >>

多重继承--读松本行弘的程序世界

这个学期是简单的学习了基本的C++。感觉C++中最复杂的还是后面的多重继承和多态性。
多重继承有以下几个优点:
很自然地做到了单一继承的扩展;
可以继承多个类的功能;
虽然说多重继承的好处很明显,但是缺点也是相当明显的:
单一继承的时候,类之间的关系就是一条直线,很明白;
而到了多重继承的时候,类之间的关系就变成了一个网状图,类之间的关系图就变的很不明确了。
此外,多重继承让类关系复杂化,
还可能出现 继承功能名字重复的问题,(比如C++中的虚基类就是为了解决此类问题)
 
C++是允许多重继承的。JAVA虽然不允许多继承,但是有接口的概念,有了接口之后,以一种叫做 “规格的继承”(书上是这么写的,感觉意思不够明确),直白地说,虽然没有直接实现多重继承,但相当于间接地实现了多重继承,感觉有点像C++中的友元类。
Ruby中介绍了Mix-in模块来解决多重继承。
简单的说相当于把这些Mix-in模块看成是一个个可拆卸的模块,要用的时候拼接插入进去,解决了实现继承的问题。
举个Window的简单例子,看下面这张图片:
 
左边是普通的多继承的例子,而右边则是Mix-in版本的例子
把Titled 和Framed分别作为两个Mix-in模块,插入到所需的类里面去,既保证了单一继承的单纯性,也实现了多重继承的共有性。
 
还是给大家举个例子好了:
 
 
 
Ruby自己也没学多少东西,只好码点东西出来冲冲数:
 
 
[ruby]  
class Person  
    attr_accessor :name, :age, :gender  
    def initialize (name)  
        @name = name  
    end  
end  
  
  
  
  
module UsefulFeatures  
    def come_in(person)  
        self.current_person = person  
        #set_current_person(person)  
    end  
    def current_person  
        #self.current+person  
        @current_person  
    end  
  
  
  
  
    def set_current_person(person)  
        puts "set current person"  
        @current_person = person  
    end  
end  
  
  
  
  
class Room  
    include UsefulFeatures  
  
  
  
  
    def current_person=(person)  
        #self.current.person = person  
        puts "set current person (use =)"  
        @current_person = person  
    end  
end  
  
  
  
  
if __FILE__ == $0  
    jack = Person.new("jack")  
    puts "name: #{jack.name}"  
    bob = Person.new("bob")  
  
  
  
  
    room = Room.new()  
    room.come_in(jack)  
    puts "room current person #{room.current_person.name}"  
end  
 
 
 
自己每天没事写写博客...写这篇文章的主要目的就是提醒自己要有发散性思维,不要被一种编程语言所局限了。
编程语言其实和现实中的语言很类似,中国人学习外语,很容易被中国的思维所局限。所以像我们学习英语,很多时候是学习的不仅仅是语言本身,而是从语言中蕴含的文化,历史,最重要的是思想,考虑问题的方式。
举个简单的例子,英语中的祈使句:Could/Would you please......
或者是虚拟语气:If I were you......
类似于这样的例子,说明人家充分考虑别人的感受,是一种尊重他人的表现。
以此类推,我们把这种思想借鉴到编程语言当中来,就可以看出不同的编程语言之间的差异了。
当然自己也只能初步了解了解了,具体的东西还是得慢慢来看。
补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,