C++ "基类"和"派生类"作用域的效果

时间:2022-09-07 23:52:08

//Author: Yao H. Wang

//转载请注明出处:http://www.cnblogs.com/yaohwang/archive/2012/03/04/2367987.html

测试代码如下:

 1 #include "stdafx.h"
2 #include <iostream>
3
4 using namespace std;
5
6 class Base
7 {
8 public:
9 int pubi;
10 void pub()
11 {
12 cout << "Base public" << endl;
13 }
14 protected:
15 int proi;
16 void pro()
17 {
18 cout << "Base protected" << endl;
19 }
20 private:
21 int prii;
22 void pri()
23 {
24 cout << "Base private" << endl;
25 }
26 };
27
28 class Derived1: public Base
29 {
30 public:
31 //proi = 1;
32 //protected:
33 //proi = 1;
34 //private:
35 //proi = 1;
36 //pubi = 1;
37 //Base::pub();
38 int get1()
39 {
40 pub();
41 pro();
42 //pri();
43 proi = 1;
44 return proi;
45 }
46 //pub();
47 };

不难从Derived1类中看出以下结论:

1、不论是基类中public、protected、private何种成员,也不论是放在派生类的public、protected、private中任一访问控制条件下的基类数据成员。派生类都无法访问它们,因为在派生类的成员函数外部,它们都被当成是声明,而且会覆盖基类同名成员。但在此处它们无法通过编译,因为它们没有数据类型。

2、基类中的方法与数据成员很象,只是它们无法通过编译的原因是没有返回值。

3、基类中的public、protected成员和方法一放入派生类成员函数就正常了。因为在此它们不在被当成声明,而是调用。