`
fireDragonpzy
  • 浏览: 447395 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

c++基础知识(一)C++类继承关系问题

c++ 
阅读更多
在C++中继承主要有三种关系:public、protected和private。这三种继承关系中public
继承是最为常用的一种继承关系,代表了接口继承含义,而他们分别具体代表了什么含义呢?
1. public
   从语义角度上来说,public继承是一种接口继承,根据面向对象中的关系而言就是,子类
   可以代替父类完成父类接口所声明的行为,也就是必须符合“Liskov替换原则(LSP)”,
   此时子类可以自动转换成为父类的接口,完成接口转换。
   从语法角度上来说,public继承会保留父类中成员(包括函数和变量等)的可见性不变,
   也就是说,如果父类中的某个函数是public的,那么在被子类继承后仍然是public的。
   
2. protected
   从语义角度上来说,protected继承是一种实现继承,根据面向对象中的关系而言就是,
   子类不能代替父类完成父类接口所声明的行为,也就是不符合“Liskov替换原则(LSP)”,
   此时子类不能自动转换成为父类的接口,就算通过类型转换(static_cast和dynamic_cast)
   也会得到一个空指针。
   从语法角度上来说,protected继承会将父类中的public可见性的成员修改成为protected
   可见性,相当于在子类中引入了protected成员,这样一来在子类中同样还是可以调用父
   类的protected和public成员,子类的子类就也可以调用被protected继承的父类的protected
   和public成员。
   例如:
       class CSample1 {
       protected:
           void printProtected() {}
       public:
           void printPublic() {}
       };
       class CSample2 : protected CSample1 {
       
       };
       class CSample3 : public CSample2 {
           void print3() {
               printProtected();
               printPublic();
           }
       };
3. private
   从语义角度上来说,private继承是一种实现继承,根据面向对象中的关系而言就是,
   子类不能代替父类完成父类接口所声明的行为,也就是不符合“Liskov替换原则(LSP)”,
   此时子类不能自动转换成为父类的接口,就算通过类型转换(static_cast和dynamic_cast)
   也会得到一个空指针。
   从语法角度上来说,private继承会将父类中的public和protected可见性的成员修改成为
   private可见性,这样一来虽然子类中同样还是可以调用父类的protected和public成员,
   但是在子类的子类就不可以再调用被private继承的父类的成员了。
       class CSample1 {
       protected:
           void printProtected() {}
       public:
           void printPublic() {}
       };
       class CSample2 : private CSample1 {
       
       };
       class CSample3 : public CSample2 {
           void print3() {
               printProtected(); // 编译错误,不可以调用该函数
               printPublic();    // 编译错误,不可以调用该函数
           }
       };
 
    在面向对象的理论中有两种概念:接口、实现,所以就出现了所谓的接口继承和实现继
承两种关系。而protected和private就是实现继承中所要用到的,其实protected和private
两者则约束继承时并没有形成两种不同的继承类别,而仅仅只是为了方便C++类方法的传递
调用而设计的,其实在java这样面向对象要求更为严格的语言当中,没有实现继承,他必须
通过委托方式来完成这一概念,如果熟悉java就会明白,如果一个对象要使用另外一个对象
的接口功能,而自身又不能够充当该对象所扮演的角色时,就会通过委托来完成,这样一来
就必须在对象中包含一个委托对象,通过对象调用语法来完成功能;在C++中就可以通过
protected和private继承来完成java中的委托关系(当然C++也可以形成对象委托关系),
那么这种情况下protected继承就容许委托可以传递(也就是被多级子类调用),而private
继承是不容许委托被传递的。


摘自:http://www.cppblog.com/chemz/archive/2007/05/31/25189.aspx
分享到:
评论

相关推荐

    C++基础知识总结

    C++面向对象基础知识总结

    c++基础知识.zip

    c++相关基础知识,继承、封装、多态等

    C++基础知识思维导图

    C++基础知识思维导图,包括面向对象语言的三大特性:封装,继承和多态

    计算机C++基础题库

    计算机C++基础题库 计算机C++基础题库是指对C++编程语言的基本概念、语法、特性和应用的总结和归纳。...本题库涵盖了计算机C++基础知识的多个方面,旨在帮助读者快速掌握C++编程语言的基本概念和应用。

    C++给出一个哺乳动物类,要求从此派生出一个狗类

    C++中类与继承的知识,给出一个哺乳动物类,要求从此派生出一个狗类狗属哺乳动物,且它的属性有品种之分(在哺乳类基础上增加品种数据成员),叫声区别于其他动物(即Speak()实现为虚函数,输出“Woof!”),还会摇...

    C++面试题基础知识回顾

    (一)默认继承权限。如果不明确指定,来自class的继承按照private继承处理,来自struct的继承按照public继承处理; (二)成员的默认访问权限。class的成员默认是private权限,struct默认是public权限。 除了这两...

    由浅入深学C++基础进阶与必做300题 源程序

    由浅入深学C++基础进阶与必做300题 源程序 解压后122M C++是近年广泛使用的程序设计语言,由C语言的基础上发展而来,实现 了由面向过程到面向对象的转变,全面支持面向对象的程序设计方法。C++ 语言在软件工业领域...

    C++面试常问知识点总结

    c++常用知识点总结,包含c++基础知识、c++内存、c++面向对象、c++stl、c++ 新特性、c++操作系统、c++计算机网络、c++数据库、c++设计模式。 C++在C语言基础上引入了面对对象的机制,同时也兼容C语言。 C++有三大特性...

    C++经典练习,从基本的到C++所有知识点

    .doc格式,一个知识点一个文档。运算符与表达式、指针、内存分配、结构、位段操作、类的继承和派生、丰富的练习题等

    嵌入式c++入门基础

    嵌入式开发师必备的c++基础知识。C++是一种面向对象的计算机程序设计语言,由美国AT&T贝尔实验室的本贾尼·斯特劳斯特卢普博士在20世纪80年代初期发明并实现(最初这种语言被称作“C with Classes”带类的C)。它是...

    C++面试宝典【包含C++常考、计算机网络常考、操作系统常考、数据结构、Linux、算法、数据库、HR面全程面试知识点】

    了解不同的数据类型及其存储方式是C++基础知识的重要组成部分。 2. 指针和引用 指针和引用是C++中重要的概念。指针是指向内存中某个位置的变量,而引用是指向某个变量的别名。了解指针和引用的区别和使用方法是C++...

    C++实例一百篇 c++ 学习基础

    c++ 初学者可以学习的源代码 包含c++ 基础知识的 各种实例 如 函数 数组 类 继承

    c++最基础的概念知识复习

    c++复习资料PPT,介绍了一些基本的c++概念,比如对象与类的概念及联系 函数重载和函数覆盖的区别 this指针的概念及作用 拷贝构造函数被调用的情况 静态成员作用和特点 多重继承时构造函数和析构函数的执行顺序 多态...

    《由浅入深学C++-基础、进阶与必做300题》pdf格式 (完整版 带目录

    本书循序渐进地讲述了C++的基础知识、C++程序的组成及其开发过程、C++程序中的数据、表达式和语句、控制程序流程、数组与字符串、指针与引用、使用函数、函数模板、错误和异常处理、宏和预编译、面向对象的开发、...

    第7章 继承与派生(郑莉 C++语言程序设计(第4版))

    主要内容包括程序设计基础知识、类与对象的基本概念、继承与多态、输入输出流,以及泛型程序设计。此外,本教材还介绍了一些常用数据结构基础知识,使得读者学习本书后,能够解决一些简单的实际问题。整套教材语言...

    C++基本知识详细介绍

    C++常识,可以对c++有基本认识,C++类。继承、多太、虚拟函数。。。。的详细介绍

    传智播客_C++基础课程讲义_v1.0.7

    1 const基础知识(用法、含义、好处) 6 2 C中“冒牌货” 6 3 const和#define相同之处 6 4 const和#define的区别 6 5 结论 6 6引用专题讲座 6 1引用(普通引用) 6 2常引用 6 3 const引用结论 6 4const修饰类 6 5...

    C++(包括c语言基础、数据类型、函数、指针、面向对象、类与对象、多态继承、重载等等)

    本教程包括25部分,比较详细的介绍了c与C++的知识,包括c语言基础、数据类型、函数、指针、面向对象、类与对象、多态继承、重载等等

Global site tag (gtag.js) - Google Analytics