C++类的继承
来源:互联网 发布:微商团队怎么优化 编辑:程序博客网 时间:2024/04/27 14:01
1、类的继承方式:一个类能访问他的public,protected,private成员,但是类对象只能访问public成员!!!
简单地说下C++类的3种继承方式,分别是public继承,protected继承,private继承。
最常用的还是public继承。class默认的是private继承,它的member如果没写权限也是默认
private。struct则相反,默认的是public继承。结合下面的图示和代码,对C++的继承就有了
比较清晰的认识了。
继承之后,derived class 继承过后的member的属性就是图中所示。
代码主要从:
1.基类成员对其对象的可见性:
2. 基类成员对派生类的可见性:
3. 基类成员对派生类对象的可见性:
这3个方面谈的。
#include <iostream>class base{public:base(){a = 0;b = 1;c = 2;}int a;protected:int b;private:int c;};class derived1 : public base{//public继承public:void fun(){//derived class可以访问public和protected memberstd::cout<<base::a<<base::b<<std::endl;//std::cout<<base::c;//不能访问}};class derived2 : protected base{//protected继承public:void fun(){//derived class可以访问public和protected memberstd::cout<<base::a<<base::b<<std::endl; // std::cout<<base::c;//不能访问}};class derived3 : private base{//private继承public:void fun(){//derived class可以访问public和protected memberstd::cout<<base::a<<base::b<<std::endl; // std::cout<<base::c;//不能访问}};class derived4 : public derived3{//base的member不能被private继承的派生类的子类访问public:void fun(){//std::cout<<a;}};class derived5 : base{//默认private继承void fun(){//derived class可以访问public和protected memberstd::cout<<base::a<<base::b;// std::cout<<base::c;//不能访问}};int main(void){base b1;derived1 d1;derived2 d2;derived3 d3;d1.fun();d2.fun();d3.fun();std::cout<<b1.a;//<span style="background-color: rgb(255, 255, 0);">base class Object只能访问public member</span>std::cout<<d1.a;//public继承时 derived class Object只能访问base class的public member//std::cout<<d1.b<<d1.c;//不能访问//std::cout<<d2.a<<d2.b;//protected继承时 derived class Object不能问访base class的member//std::cout<<d3.a;//private继承时 derived class Object不能问访base class的memberreturn 0;}
2、派生类对象的构造
c++规定,创建派生类对象的时候首先调用基类的构造函数初始化基类成员,随后才调用派生类构造函数。 正好相反,先调用派生类的析构函数,在调用基类析构函数
#include <iostream>using namespace std;class base{public:base(){ cout<<"父类构造"<<endl;}~base(){ cout<<"父类xigou"<<endl;}};class child : public base{//public继承public:child(){cout<<"子类构造"<<endl;}~child(){cout<<"子类xigou"<<endl;}};int main(void){//base b1;child c1;return 0;}
0 0
- C++-类的继承
- C#中类的继承
- C++: 类的继承派生
- C/C++:C++类的继承
- 不能被继承的类[C/C++/C#]
- C#教程 第八课:类的继承
- C#教程第八课:类的继承
- Objective-C 类的继承、方法重载
- Objective-C 类的继承、方法重载
- objective-c语法学习:类的继承
- C语言类的继承和派生
- 【Objective-C】OC中类的继承
- obj-c编程04:类的继承
- 黑马程序员--- objective-c 类的继承
- object-c中类的继承
- 4.C++:C++类的私有继承
- C++:类继承 private, protected的区别
- 【c++】this 指针和类的继承
- java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive
- The 2px border problem in QGraphicsView
- initcall func(三)
- Nmap扫描原理与用法
- 窗体缩放方法
- C++类的继承
- visual studio 2013 中“.”后面每条提示前的小图标----“类视图”和“对象浏览器”图标
- 微信的传播特性及传播模式 转!
- ubuntu UltraEdit 反复试用的办法
- [转]C++学习心得
- initcall func(四)
- cocos2d-x 3.x Git ignore文件内容
- 如何写好一篇高质量的paper
- The method replace(int, Fragment, String) in the type FragmentTransaction is not applicable for the