条款32:确定你的public继承塑模出is-a关系
以C++进行面向对象编程,最重要的一个规则是:public inheritance(公有继承)意味is-a(是一种)的关系。
在C++领域中,任何函数如果期望获得一个类型为基类的实参(而不管是传指针或是引用),都也愿意接受一个派生类对象(而不管是传指针或是引用)。(只对public继承才成立。)好的接口可以防止无效的代码通过编译,因此你应该...
分类:
编程语言 时间:
2014-12-10 16:23:32
阅读次数:
226
1、在继承中,private类型不能被继承。
公有继承,基类中的public在派生类中还是public类型,protected类型还是protected类型。
保护继承,基类中的public,protected在派生类中均为protected类型。
私有继承,基类中的public,protected均为private类型。
2、当定义一个类对象时,首先从顶层依次调用基类的构...
分类:
编程语言 时间:
2014-11-09 15:15:42
阅读次数:
262
35.使公有继承体现 “是一个” 的含义。
共有继承意味着 “是一个”。如 class B:public A; 说明类型B的每一个对象都是一个类型A的对象,A比B具有更广泛的概念,而B表示一个更特定的概念。
在C++中任何一个参数为基类的函数都可以实际取一个派生类的对象,只有共有继承会如此,对于共有继承,如AB,若有两个函数 一个函数为 void fun1(A &a);另一个函数为void ...
分类:
编程语言 时间:
2014-10-09 17:32:07
阅读次数:
236
公有继承(public)、私有继承(private)、保护继承(protected)是常用的三种继承方式。 1. 公有继承(public) 公有继承的特点是基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的,不能被这个派生类的子类所访问。 2. 私有继承(...
分类:
编程语言 时间:
2014-10-04 11:54:36
阅读次数:
170
类的继承过程分为公有继承,保护继承和私有继承,无论哪一种继承,基类的私有成员在派生类成员中都是不可见的,可是基类的私有成员是否被派生类继承了呢?通过以下实验即可知道。
代码如下:
class Base {
public:
Base():a(5){}
private:
virtual void f() { cout
int a;
};
cl...
分类:
其他好文 时间:
2014-09-29 16:48:31
阅读次数:
180
面向对象编程其中肯定少不了类的继承机制,而类的继承又分为三种类型:公有继承(public)、私有继承(private)和保护继承(protected),不同的继承机制使派生类对基类成员有不同的访问权限,而派生类的类成员和对象成员对基类又有不同的访问权限。
在开始介绍派生类的访问机制之前,我们先来了解一下类的成员和对象的成员。
类的成员...
分类:
编程语言 时间:
2014-09-20 22:57:09
阅读次数:
638
继承
多继承:字面上了解,即子类可以继承多个父类;
继承分类:公有继承、保护继承、私有继承。
公有继承(public)
基类的公有成员和保护成员可以作为其派生类的公有成员和保护成员
派生类的成员函数可以访问基类中的公有成员和保护成员,无法访问基类中的私有成员
派生类的对象可以访问基类的公有成员
私有继承(private)
基类的公有成员和保...
分类:
编程语言 时间:
2014-09-17 18:45:02
阅读次数:
218
在C++中一般很少采用私有继承。
一般采用的都是公有继承的方式:
class A:public B{...};
但是私有继承在我们只要部分公有化继承成员的时候是很有用的。
当采用的是私有继承的时候,基类中的public都会变成private 。而此时如果我们希望其中的一部分...
分类:
其他好文 时间:
2014-08-25 17:03:14
阅读次数:
128
第一个规则是,和公有继承相反,如果两个类之间的继承关系为私有,编译器一般不会将派生类对象(如Student)转换成基类对象(如Person)第二个规则是,从私有基类继承而来的成员都成为了派生类的私有成员,即使它们在基类中是保护或公有成员,即派生类对象不能访问基类的所有成员class person{}...
分类:
其他好文 时间:
2014-08-24 14:07:32
阅读次数:
126
最近重新看了遍基类指针、引用的相关知识点,一直在想 ,如果派生类不是公有继承,那么用基类指针、引用指向该派生类对象时会发生什么?派生类内的成员的访问权限会不会发生什么变化?
结果实验表明,系统不支持此类类型转换。基类指针、引用不能指向继承方式为protected与private的派生类对象。
假设我们有以下类:
class A
{
public:
int publi;
protecte...
分类:
其他好文 时间:
2014-08-14 14:15:08
阅读次数:
522