1.通过派生类的对象直接访问。前提是public继承

2.通过基类成员函数直接访问基类成员。无论哪种继承方式。基类的public和private都不可以以这种方式访问

3.通过基类名称访问被派生类重定义所隐藏的成员

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3
 4 class Rectangle
 5 {
 6     public:
 7         void setLength(double h) {
 8             length = h;
 9         }
10         void setWidth(double w)
11         {
12             width = w;
13         }
14         double getLength()
15         {
16             return length;
17         }
18         double getWidth()
19         {
20             return width;
21         }
22         double area()
23         {
24             return width*length;
25         }
26         double volume()
27         {
28             return 0;
29         }
30         void print()
31         {
32             cout << "\nLength = " << length << "\nWidth = " << width;
33         }
34     protected:
35         double length;
36         double width;
37 };
38
39 class Cube:public Rectangle
40 {
41     public:
42         void setHigh(double h)
43         {
44             high = h;
45         }
46         double getHigh()
47         {
48             return high;
49         }
50         double area()
51         {
52             //重定义area函数 
53             return 2*(width*length + width*high + high*length);
54         }
55         double volume()
56         {
57             return width*length*high;
58         }
59
60         void print()
61         {
62             Rectangle::print();
63             cout << "\nhigh = " << high << endl;
64         }
65     private:
66         double high;
67 };
68
69 int main()
70 {
71     Cube c1;
72     c1.setLength(4);
73     c1.setHigh(3);
74     c1.setWidth(5);
75
76     c1.Rectangle::print();
77     c1.print();
78     cout << "Cube area = " << c1.area() << endl;
79     cout << "Cube bottom area = " << c1.Rectangle::area() << endl;
80     cout << "Cube volume = " << c1.volume() << endl;
81     return 0;
82 }
View Code
02-11 16:09