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
原创粉丝点击