面向对象之类的继承与派生、三种继承方式的访问权限

/*

**test27.cpp : Defines the entry point for the console application.

**系统winXP SP3 32位.

**面向对象之类的继承与派生、三种继承方式的访问权限

*/


#include "stdafx.h"

#include "iostream.h"


class A{

public:

void fA1(){

cout<<"fA1()"<<endl;

};

void fA2(){

cout<<"fA2()"<<endl;

};

int getInt(){

return iNum;

};

A(){

iNum = 0;

};

private:

int iNum;

};


class B:public A{

public:

void fB1(){

cout<<"fB1()"<<endl;

};

void fB2(){

cout<<"fB2()"<<endl;

};

};


class C:protected A{

public:

void fC1(){

cout<<"fC1()"<<endl;

};

void fC2(){

cout<<"fC2()"<<endl;

};

};


class D:private A{

public:

void fD1(){

cout<<"fD1()"<<endl;

};

void fD2(){

cout<<"fD2()"<<endl;

};

};


int main(int argc, char* argv[])

{

B b;

C c;

D d;

b.fA1(); //fA1(),public继承,从A那里继承而来的成员函数,可以访问到

b.fA2(); //fA2(),public继承,从A那里继承而来的成员函数,可以访问到

b.fB1(); //fB1(),类自身的成员,可以访问到

b.fB2(); //fB2(),类自身的成员,可以访问到

//cout<<b.iNum<<endl; //私有成员,访问不到

cout<<b.getInt()<<endl; //私有成员,通过public的成员函数可以访问到


//c.fA1(); //protected继承,在子类中变为了私有成员,从A那里继承而来的成员函数,不可以访问到

//c.fA2(); //protected继承,在子类中变为了私有成员,从A那里继承而来的成员函数,不可以访问到

c.fC1(); //fC1(),类自身的成员,可以访问到

c.fC2(); //fC2(),类自身的成员,可以访问到

//cout<<c.iNum<<endl; //私有成员,访问不到

//cout<<c.getInt()<<endl; //protected继承私有成员,getInt()在子类中变为了私有成员,访问不到


//d.fA1(); //private继承,从A那里继承而来的成员函数,不可以访问到

//d.fA2(); //private继承,从A那里继承而来的成员函数,不可以访问到

d.fD1(); //fD1(),类自身的成员,可以访问到

d.fD2(); //fD2(),类自身的成员,可以访问到

//cout<<c.iNum<<endl; //私有成员,访问不到

//cout<<c.getInt()<<endl; //private继承私有成员,访问不到


return 0;

}


Tips1:逻辑上类B继承类A,则B是A的一种。类的继承分为public公有继承、protected保护继承、private私有继承。子类拥有父类除了父类构造和析构函数,所有的成员函数和成员变量,子类就是一种特殊的父类,子类对象可以当做父类的对象使用,子类可以拥有父类没有的方法和属性。

Tips2:具体的继承方式与访问控制权限如下:(注意这里的私有成员是被包含在继承的类中的,但是不可访问)


Tips3:总结:只能在当前类和子类中访问的成员设置为protected;只能在当前类被访问的成员设置为private; 需要被外部访问的成员直接设置为public。

推荐阅读更多精彩内容