29 继承(一)
2016-03-29 08:53
459 查看
三种继承方式
#include <iostream> using namespace std; class Base { public: int x_; protected: int y_; private: int z_; }; class PublicInherit : public Base//公有继承 { public: void Test() { x_ = 10; y_ = 20; //z_ = 30;//基类私有成员无法直接访问 } private: int a_; }; class PublicPublicInherit : public PublicInherit { public: void Test() { y_ = 20; } }; class PrivateInherit : private Base//私有继承 { public: void Test() { x_ = 10; y_ = 20; //z_ = 30; } }; int main(void) { PublicInherit pub; pub.x_ = 20; PrivateInherit pri; //pri.x_ = 10; return 0; }
接口继承与实现继承
将类的公有成员函数称为接口公有继承,基类的公有成员函数在派生类中仍然是公有的,换句话说是基类的接口成为派生类的接口,因而将它称为接口继承。
实现继承,对于私有、保护继承,派生类不继承基类的接口。派生类将不再支持基类的公有接口,它希望能重用基类的实现而已,因此将它称为实现继承。
继承与重定义
对基类的数据成员的重定义对基类成员函数的重定义分为两种
overwrite
与基类完全相同
与基类成员函数名相同,参数不同
override
#include <iostream> using namespace std; class Base { public: Base() :x_(0) { } int GetBaseX() const { return x_; } void Show() { cout << "Base::Show ..." << endl; } int x_; }; class Derived : public Base { public: Derived() : x_(0) { } int GetDerivedX() const { return x_; } void Show(int n) { cout << "Derived::Show " << n << endl; } void Show() { cout << "Derived::Show " << endl; } int x_;//重定义时隐藏了基类的成员 }; int main(void) { Derived d; d.x_ = 10; cout << d.GetBaseX << endl; cout << d.GetDerivedX() << endl; d.Show();//调用派生类不带参数的Show d.Base::Show();//调用基类Show return 0; }
class A { public: void FunA() { ... } }; //组合、将一个类作为另一个类的对象成员。委托 class B { public: void FunB() { a.FunA(); } private: A a_; };
相关文章推荐
- PostgreSQL教程(三):表的继承和分区表详解
- Lua面向对象之类和继承浅析
- 浅析Ruby中继承和消息的相关知识
- 设计引导--一个鸭子游戏引发的设计理念(多态,继承,抽象,接口,策略者模式)
- C++实现不能被继承的类实例分析
- C# 面向对象三大特性:封装、继承、多态
- PHP类的封装与继承详解
- js继承 Base类的源码解析
- Javascript 面向对象 继承
- JavaScript 继承使用分析
- Javascript面向对象编程(二) 构造函数的继承
- Javascript中的几种继承方式对比分析
- javascript面向对象之Javascript 继承
- JavaScript 对象、函数和继承
- 详述JavaScript实现继承的几种方式(推荐)
- javascript 继承学习心得总结
- 学习javascript面向对象 javascript实现继承的方式
- 关于JavaScript的面向对象和继承有利新手学习
- JavaScript 继承详解(一)
- JavaScript 继承详解(二)