C++继承问题
来源:互联网 发布:淘宝代运营 猪八戒网 编辑:程序博客网 时间:2024/05/29 19:46
C++的三大特性:封装, 继承, 多态
如何实现继承是C++中基本的核心的部分。
我在此就自己的认识理一理继承问题;
情形1:
单继承: 单继承是最简单的继承方式, 其中继承权限分为 public ;protectsd和 private三种。
class A{
public:
int a;
protected:
int b;
private:
int c;
};
class B: public A{
};
class C :private A{
};
class D: protected A{ };
很显然B是满足is-a性质的公有继承。
访问权限如下:
首先, 类B公有继承自A, 类B可以访问类A中的公有成员和保护成员。类B的对象只能访问类A中的公有成员。
类C私有继承自A, 类C可以访问类A中的公有成员和保护成员, 类C对象无法访问类A中的成员;
类D保护继承自A, 类D可以访问类A中的公有成员和保护成员, 类D对象无法访问类A中的成员。
如果再有类继承自C或者D则访问关系可以以此类推。
多重继承:
多重继承的内部分析:
1. class A{int a;};
class B{int b;}
class C: public A, public B{}
C c;
A *p1 = c 与B *p2 = c; 其中p2在指向c的时候在内部进行了转化 p2 = (B*)(&c + sizeof(A));
虚拟继承:
虚拟继承的内部分析:
虚拟继承是多重继承的特有概念, 是为了解决多重继承中的问题而提出的。
产生一个虚指针指向基类。
首先分析下公有继承,保护型继承和私有继承:
公有继承很好理解, 就是要塑模出is-a的特性,就是要求用此类的用户不会误解你的意思。
如 class bird{
public:
void fly();
};
class qi’e: public bird
{}; 类的继承表达了企鹅可以飞,但是现实中确不是如此的。这就是乱用了公有继承。
私有继承:
私有继承 的含义是根据某物塑模出东西来,一般是不要派生类访问基类的保护型成分, 或者为了重新定义虚函数,而不让派生类中public出基类的虚函数,所采用的设计方法;
多重继承和虚继承之间的关系:
再讲一下虚拟成员函数:.
多重继承中虚拟成员函数是很难实现的, 复杂度很高。
主要在于第二个基类的实现, 问题1 虚拟的析构函数,问题二: 基类2中的其他非虚函数, 问题三: 虚拟函数;
需要在执行期加入位置偏移的代码。
并且需要分开来访问:
#include "stdafx.h"
#include <iostream>
using namespace std;
class Base1 {
public:
virtual void f(){
cout<<1;
}
virtual void g(){
cout<<4;
};
};
class Base2{
public:
virtual void f(){
cout<<2;
}
virtual void h(){};
};
class C :public Base1, public Base2{
public:
virtual void f(){
cout<<3;
}
};
void main()
{
Base1 a;
Base2 b;
C c;
Base1 *p1 = &c;
p1->g();
Base2 *p2 = &c;
p2->h();
p2->g();//错误 无法调用Base1中的函数
}
- c ++中继承问题小结
- c++-关于菱形继承&虚继承的问题总结
- 接口继承的声明问题 [C#, BCL]
- C++:多继承中的二义性问题
- Objective-C私有变量继承问题
- c继承
- C++----------------继承
- 【c#】继承
- C++:继承
- C++::继承
- [C++]继承
- 【C++】继承
- 【C#】继承
- 【c++】继承
- 【C++】继承
- c#-继承
- 【C++】 继承
- 【C#】继承
- 第26周工作计划表
- 桶排序
- 做为一个程序员应该看的书籍
- 1282 - Cyin的工资
- VC设置静态文本控件的显示字体和显示内容
- C++继承问题
- Android & Linux的suspent和resume执行流程
- 用thinpkphp内容编码错误
- B. Pashmak and Flowers
- 几千微信好友是这样来的
- projecteuler---->problem=36----Double-base palindromes
- ICETEK-OMAPL138运行校准触摸屏程序后,只能点击第一个点,其他点无法点击
- 权限检测_相机_麦克风
- s3c2440通过GPIO口控制三块74HC595