26、不一样的C++系列--继承的基础知识
来源:互联网 发布:铜交易软件 编辑:程序博客网 时间:2024/05/20 20:21
继承
继承的概念
类之间的两大关系:组合和继承:
- 组合关系的特点:
- 将其它类的对象作为自己的成员使用
- 当前类的对象与成员对象的声明期相同
- 成员对象在用法上与普通对象完全一致
组合关系的代码示例:
class Memory{public: Memory() { cout << "Memory()" << endl; } ~Memory() { cout << "~Memory()" << endl; }};class Disk{public: Disk() { cout << "Disk()" << endl; } ~Disk() { cout << "~Disk()" << endl; } };class Computer{ Memory mMem; Disk mDisk;public: Computer() { cout << "Computer()" << endl; } ~Computer() { cout << "~Computer()" << endl; }};
继承(父子关系):
- 子类拥有父类的所有属性和行为
- 子类就是一种特殊的父类
- 子类对象可以当做父类对象使用
- 子类中可以添加父类没有的方法和属性
C++中通过下面的方式描述继承关系
class Parent{ int mv;public: void method() {};};class Child: public Parent // 描述继承关系{};
- 重要规则:
- 子类就是一个特殊的父类
- 子类对象可以直接初始化父类对象
- 子类对象可以直接赋值给父类对象
继承关系代码示例:
#include <iostream>#include <string>using namespace std;class Parent{ int mv;public: Parent() { cout << "Parent()" << endl; mv = 100; } void method() { cout << "mv = " << mv << endl; }};class Child : public Parent{public: void hello() { cout << "I'm Child calss!" << endl; }};int main(){ Child c; c.hello(); c.method(); return 0;}
继承的访问级别
根据面向对象理论:
- 子类拥有父类的一切属性和行为
- 子类能够直接访问父类的私有成员
根据C++语法:
- 外界不能直接访问类的private成员
- 子类不能直接访问父类的私有成员
举一个例子:
class Parent{private: int mv;public: Parent() { mv = 100; } int value() { return mv; }};class Child : public Parent{public: int addValue(int v) { //子类直接访问父类的私有成员变量 mv = mv + v; }};int main(){ return 0;}
运行结果如下:
nethanhandeMacBook-Pro-2:代码 nethanhan$ g++ 44-1.cpp 44-1.cpp:27:9: error: 'mv' is a private member of 'Parent' mv = mv + v; // ???? <C8><E7><BA>η<C3><CE>ʸ<B8><C0><E0><B5>ķǹ... ^44-1.cpp:9:9: note: declared private here int mv; ^44-1.cpp:27:14: error: 'mv' is a private member of 'Parent' mv = mv + v; // ???? <C8><E7><BA>η<C3><CE>ʸ<B8><C0><E0><B5>ķǹ... ^44-1.cpp:9:9: note: declared private here int mv; ^2 errors generated.
结果里说到 mv 是一个私有成员变量,在子类中不能直接私有成员。所以需要使用另外一个关键字 protested
。
- 关键字
protected
的意义:- 修饰的成员不能被外界直接访问
- 修饰的成员可以被子类直接访问
- 没有protected就无法完成真正意义上的代码复用
使用示例:
class Parent{//这里使用关键字 protected来声明//子类就可以直接访问到//而且外界不可以直接访问到protected: int mv;public: Parent() { mv = 100; } int value() { return mv; }};class Child : public Parent{public: int addValue(int v) { //子类可以直接使用父类的成员变量 mv = mv + v; }};
继承方式
- C++中支持三种不同的继承方式
public
继承- 父类成员在子类中保持原有访问级别
private
继承- 父类成员在子类中变为私有成员
protected
继承- 父类中的公有成员变为保护成员,其它成员保持不变
- C++中的默认继承方式为private
- 继承方式比较
- 注意:
- 一般而言,C++工程项目中只使用public 继承
- C++的派生语言只支持一种继承方式(public 继承)
- protected 和 private 继承带来的复杂性远大于实用性
阅读全文
0 0
- 26、不一样的C++系列--继承的基础知识
- 31、不一样的C++系列--多重继承
- 28、不一样的C++系列--继承与多态
- 1、不一样的C++系列--C到C++的升级
- 37、不一样的C++系列--C语言异常处理
- 27、不一样的C++系列--继承的构造与析构
- Objective C 不一样的语法
- 1 不一样的 C 基础
- 不一样的C语言-变量
- 继承的基础知识
- 继承的基础知识
- 5、不一样的C++系列--函数重载
- 8、不一样的C++系列--面向对象
- 12、不一样的C++系列--初始化列表
- 14、不一样的C++系列--对象销毁
- 15、不一样的C++系列--临时变量
- 17、不一样的C++系列--静态成员
- 19、不一样的C++系列--友元
- Lua 迭代器与泛型for
- LintCode 两数组的交Ⅱ
- java垃圾回收以及jvm参数调优概述
- FFT 9.0 IP的configure 信息进不去
- 虚拟机登陆桌面失败
- 26、不一样的C++系列--继承的基础知识
- JVM原理讲解和调优
- 实用软件工程——习题答案
- BZOJ 4169: Lmc的游戏
- 文本挖掘系列之文本分类
- 一个程序在计算机中到底是如何运行的?
- CSU-1904-精灵的交际网
- LintCode 合并区间
- iOS 下载图片