1.通过派生类的对象直接访问。前提是public继承
2.通过基类成员函数直接访问基类成员。无论哪种继承方式。基类的public和private都不可以以这种方式访问
3.通过基类名称访问被派生类重定义所隐藏的成员
1 #include2 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 Rectangle40 {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 }