CPP学习之——两义性的归属问题(12.16)

一 概述

如果我们定义了四个类,人类,父类,母类,子类。这四个类的归属关系如下:

二 理论分析

  • 最高的基类为人类,它派生了两个类——父类和母类,子类则继承了父类和母类的特征。
  • 假设说人类有个特征是直立行走,它的这个特征为父类和母类所继承,而子类继承了父类和母类的特征,那么他将间接地继承了人类的特征——直立行走
  • 他们的归属关系是,父类和母类归属于人类,子类归属于父类和母类,因此父类和母类可以直接继承人类的特征,子类虽不可以直接继承人类的特征,但可以通过继承父类和母类的特征,从而达到间接继承人类特征的目的
  • 正是由于子类与人类之间隔着母类和父类,因此在子类中访问人类的特征——"直立行走"的时候将会遇到障碍,不能象母类和父类访问人类特征那么随心所欲
  • 换一句话说,一个派生类从多个基类派生,而这些基类又有一个共同的基类,那么在派生类中访问共同的基类中的成员时会产生两义性

三 示例演示及结果输出

3.1 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<iostream>
using namespace std;
class human
{
public:void walk(){cout<<"人类能够直立行走!"<<endl;}
};
class mother:public human{};
class father:public human{};
class son:public mother,public father{};
int main()
{
son tom;
tom.father::walk();
tom.mother::walk();
//tom.human::walk();
return 0;
}

3.2 输出结果

1
2
人类能够直立行走!
人类能够直立行走!

3.3 代码说明

  • 父类mother、father的walk方法能够输出
  • human的walk方法不能输出