C++基础之继承
2010-08-18 13:50
169 查看
在C++中,继承的格式定义为:
class 派生类类名 : <访问限定符> 基类类名1 , <访问限定符> 基类类名2 ......{
//派生类特有的成员
};
访问限定符有3种:public 、protected 、 private。
如果为private , 表示私有继承,即基类的所有公有或者保护成员成为派生类的私有成员 ;
如果为protected ,即基类的所有公有成员为派生类的保护成员,私有成员则依然是私有成员 ;
如果为public ,表示公有继承,基类的成员限定不变。
默认情况下是私有继承 。
访问限定的总结如下:
·公有继承时,基类中的公有成员和保护成员可被派生类中的成员函数访问,基类中仅有公有成员才可呗派生类的对象访问。
·保护继承时,将使基类中的公有成员和保护成员成为派生类的保护成员;这使得派生类的对象不能访问基类中的任何成员,而派生类的成员函数可以访问基类中的公有成员和保护成员。
·私有继承时,派生类的成员函数可访问基类中的公有成员和保护成员;派生类的对象不能访问基类中的任何成员。
不过,通过访问声明,有时候可以绕过这个限定,如下面的例子所示:
对于积累的静态成员而言,不管哪种继承方式都不影响对静态成员的访问。不过,再访问时需要用“类名 :: 成员”的方式显示说明,例如:
class 派生类类名 : <访问限定符> 基类类名1 , <访问限定符> 基类类名2 ......{
//派生类特有的成员
};
访问限定符有3种:public 、protected 、 private。
如果为private , 表示私有继承,即基类的所有公有或者保护成员成为派生类的私有成员 ;
如果为protected ,即基类的所有公有成员为派生类的保护成员,私有成员则依然是私有成员 ;
如果为public ,表示公有继承,基类的成员限定不变。
默认情况下是私有继承 。
]#include <iostream> #include <stdio.h> using namespace std; class Base { public: int b1 ; protected: int b2 ; private: int b3 ; }; class D1 : public Base{ public: void test(){ b1 = 10 ; b2 = 20 ; // b3 = 30 ; 不可以访问 } }; class D11 : public D1 { public : void test(){ b1 = 5 ; b2 = 6 ; // b3 = 7 ; 不可以访问 } }; class D2 : private Base { public : void test(){ b1 = 8 ; b2 = 9 ; // b3 = 10 ; 不可以访问 } }; class D22 : public D2 { public : void test(){ // b1 = 11 ; 不可以访问,因为 D2 为private // b2 = 12 ; 不可以访问 // b3 = 13 ; 不可以访问 } }; class D3 : protected Base{ public: void test(){ b1 = 15 ; b2 = 16 ; // b3 = 17 ; 不可以访问 } }; class D33 : public D3{ public : void test(){ b1 = 18 ; b2 = 19 ; // b3 = 20 ; 不可以访问 } }; int main() { D11 d1 ; d1.b1 = 1 ; // d1.b2 = 2 ; b2 为protected 只能由类及其派生类的成员函数所访问 //d1.b3 = 3 ; b3 为private 只能由类的成员函数所访问 D22 d2 ; /* d2.b1 = 4 ; b1 为 private,所以不能访问,只能由本类的成员桉树来访问 d2.b2 = 5 ; b2为 private,所以不能访问,只能由本类的成员桉树来访问 d2.b3 = 6 ; b3 为 private,所以不能访问,只能由本类的成员桉树来访问 */ D33 d3 ; /* d3.b1 = 4 ; b1 为 protected,所以不能访问,只能由本类及其派生类的成员函数来访问 d3.b2 = 5 ; b2为 protected,所以不能访问,只能由本类及其派生类的成员函数来访问 d3.b3 = 6 ; b3 为 protected,所以不能访问,只能由本类及其派生类的成员函数来访问 */ }
访问限定的总结如下:
·公有继承时,基类中的公有成员和保护成员可被派生类中的成员函数访问,基类中仅有公有成员才可呗派生类的对象访问。
·保护继承时,将使基类中的公有成员和保护成员成为派生类的保护成员;这使得派生类的对象不能访问基类中的任何成员,而派生类的成员函数可以访问基类中的公有成员和保护成员。
·私有继承时,派生类的成员函数可访问基类中的公有成员和保护成员;派生类的对象不能访问基类中的任何成员。
不过,通过访问声明,有时候可以绕过这个限定,如下面的例子所示:
]#include <iostream> #include <stdio.h> using namespace std; class Base{ public: void func1(int i){ cout<<i<<endl ; } void func2(){ cout<<"A/n" ; } }; class Derived : private Base{ public: void func3(){ cout<<"B/n" ; } Base :: func1 ;//将A中的成员声明为B的公有成员 }; int main() { Derived b ; b.func1(10) ;//成功 // b.func2() ; //错误,不能访问私有成员 b.func3() ; //成功,可以访问类自己的公有成员 return 0; }
对于积累的静态成员而言,不管哪种继承方式都不影响对静态成员的访问。不过,再访问时需要用“类名 :: 成员”的方式显示说明,例如:
相关文章推荐
- c++基础学习12-c++的多态与继承
- 【C++学习笔记】继承与派生基础概念
- C++ FAQ Lite[19]--继承(基础)(更新)
- c++继承基础
- C++基础6 【继承】 类型兼容 satatic 多继承 虚继承 【多态】 案例 虚析构函数 重载重写重定义
- c++基础 之 面向对象特征一 : 继承
- C++基础——多继承问题
- C02-程序设计基础提高班(C++)第12周上机任务-类的继承
- c++基础语法:普通继承
- C++基础知识整理四(构造函数及继承)
- C++基础之继承与派生
- C++基础(八)继承与派生——派生类成员的访问属性
- 26、不一样的C++系列--继承的基础知识
- 【C++基础】 继承与动态绑定
- [MFC学习之C++基础] 孙鑫视频中第三讲中提到的小测试程序(关于基类和子类的继承关系)
- C++基础系列:访问控制与继承
- 【c++基础】关于继承关系中构造函数的粗略理解
- C++基础之类的虚继承
- C++基础5:C++三大特征封装、继承、多态
- c++基础之虚拟继承,虚函数virtual