private、protected、public讨论
public: 类对象和类函数都可以访问;
private:类对象不可以访问,类成员函数可以访问;
protected:
如果成员对象或者函数在本类中具有protected,对于成员函数而言具有public,对于类对象而言具有private。// 所谓本类就是所在类
在本类的讨论中来看,protected具有和private同样的特性。
区别:在继承中可以体现出来。
——————————————————————————————————————————————————————————————
继承关系
public继承:基类的public和protected成员的访问属性在派生类中保持不变,但基类的private成员不可访问。派生类的成员可以直接访问基类中的public和protected成员,但不能访问基类的private成员。通过派生类的对象只能访问基类的public对象。
private继承:基类的public和protected成员都以private出现在派生类中,但基类的private成员不可访问。派生类的成员可以直接访问基类中的public和protected成员,但不能访问基类的private成员。通过派生类的对象不能访问基类任何成员。
protected继承:基类的public和protected成员都以protected出现在派生类中,但基类的private成员不可访问。派生类的成员可以直接访问基类中的public和protected成员,但不能访问基类的private成员。通过派生类的对象不能访问基类任何成员。
——————————————————————————————————————————————————————————————
View Code
1 #include <iostream>
2 using namespace std;
3 class A
4 {
5 protected:
6 int a;
7 void fun()
8 { cout << "funa" << endl; }
9 public:
10 A(int i) : a(i) {}
11 void s()
12 { cout << a << endl; }
13 };
14 class B : public A
15 {};
16 void main()
17 {
18 A b(1);
19 b.s(); // 通过
20 //cout << b.a << endl; // 报错
21 //cout << b.fun() << endl; // 报错
22 }