一、C++中的继承方式会影响子类的对外访问属性
public:修饰的成员变量 方法 在类的内部 类的外部都能使用
protected:修饰的成员变量方法,在类的内部使用,在继承的子类中可用
private:修饰的成员变量方法,只能在类的内部使用
二、private成员在子类中依然存在,但是却无法访问到。不论哪种方式继承基类,派生类都不能直接使用基类的私有成员。
三、C++中子类对外访问属性表:
父类成员访问级别
继 public protected private
承 public public protected private
方 protected protected protected private
式 private private private private
四、三看原则
C++中的继承方式会影响子类的对外访问属性,判断某一句话,能否被访问
1)看调用语句,这句话写在子类的内部还是外部
2)看子类如何从父类继承(public、private、protected)
3)看父类中的访问级别(public、private、protected)
五、综合训练
// 派生类访问控制综合训练.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
class A{
private:
int a;
protected:
int b;
public:
int c;
A(){
a = 0;
b = 0;
c = 0;
}
void set(int a, int b, int c){
this->a = a;
this->b = b;
this->c = c;
}
};
class B :public A{
public:
void print(){
//cout << "a = " << a;//err
cout << "b = " << b;//ok
cout << "c = " <<c<< endl;//ok
}
};
class C :protected A{
public:
void print(){
//cout << "a = " << a;//err
cout << "b = " << b;//ok
cout << "c = " << c << endl;//ok
}
};
class D :private A{
public:
void print(){
//cout << "a = " << a;//err
cout << "b = " << b;//ok
cout << "c = " << c << endl;//ok
}
};
int _tmain(int argc, _TCHAR* argv[])
{
A aa;
B bb;
C cc;
D dd;
aa.c = 100;//ok
bb.c = 100;//ok public
//cc.c = 100;//err protected 只能在子类的内部中使用
//dd.c = 100;//err private
aa.set(1,2,3);//ok
bb.set(1, 2, 3);//public ok
//cc.set(1, 2, 3);//protected err 只能在类的内部使用
//dd.set(1,2,3);
bb.print();//ok public
cc.print();//ok public
dd.print();//ok public
return 0;
}