/*
**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。