第7章继承与派生 例6.1(续二) class CPoint: public CLocation∥从 LOcation中公有继承 private char Color[10] public CPoint(char*c) void setcolor(char *c) void showo CPoint:: C Point(char*c) strcpy( color, c) void CPoint SetColor(char *c) 调用从 CLocation类中继承来的成 员函数GeO和GetY(。 strcpy( color, c); void CPoint: Showo cout < Getxo <<, <<Gety( <<<< Color < endl
例6.1 (续二) class CPoint : public CLocation //从CLocation中公有继承 { private: char Color[10]; public: CPoint(char *c); void SetColor(char *c); void Show(); }; CPoint::CPoint(char *c) { strcpy(Color,c); } void CPoint::SetColor(char *c) { strcpy(Color,c); } void CPoint::Show() { cout << Getx() << "," << Gety() << " " << Color << endl ; } 第7章 继承与派生 调用从CLocation类中继承来的成 员函数GetX()和GetY()
第7章继承与派生 例6.1(续三) void main(void) 位置坐标通过 Location类构造函 数的默认参数值设置为(0,0) CPoint p( Red); p Showo p MoveTo(7, 8) p Showo p SetColor("Green") p Showo 程序运行结果为 0,0 Red 7,8 Red 7,8 Green 返回
例6.1 (续三) void main(void) { CPoint p("Red"); p.Show(); p.MoveTo(7,8); p.Show(); p.SetColor("Green"); p.Show(); } 位置坐标通过CLocation类构造函 数的默认参数值设置为(0,0) 程序运行结果为: 0,0 Red 7,8 Red 7,8 Green 第7章 继承与派生 返 回
第7章继承与派生 6.2类的继承方式 类成员的访问权限 私有成员( private):可以被类自身的成员和友元访问,但不能被包 括派生类在内的其他任何类和任何普通函数访问 公有成员( public):可以被任何普通函数和任何类的成员函数访问 保护成员( protected):可以被类自身的成员和友元访问外,还可以 被派生类的成员函数访问,但不能被任何非友元的普通函数访问 类的三种继承方式: 公有继承(pubc: 保护继承( protected): 私有继( private):
6.2 类的继承方式 类成员的访问权限: 私有成员(private):可以被类自身的成员和友元访问,但不能被包 括派生类在内的其他任何类和任何普通函数访问 公有成员(public):可以被任何普通函数和任何类的成员函数访问 保护成员(protected):可以被类自身的成员和友元访问外,还可以 被派生类的成员函数访问,但不能被任何非友元的普通函数访问 类的三种继承方式: 公有继承(public): 保护继承(protected): 私有继承(private): 第7章 继承与派生
第7章继承与派生 6.2类的继承方式 62.1公有继承 公有继承的特点: (1)基类的私有成员不能被派生类的函数成员访问 (2)基类的公有成员和保护成员在派生类中的访问权限不变 分析例61 基类 CLocation中的公有成员Getx()、Gety()和 Moveto(),在派生类 C Point中的访问权限仍然是公有的 而x,y是基类 CLocation的私有成员,在派生类 CPoint的成 员函数中不能访问。如果将 CPoint类的成员函数Show()改写成 下面的形式: void CPoint Showo cout <<x<<", <<y<<<<Color < endl 错误信息:“不能访问 CLocation类中 的私有成员x,y
6.2 类的继承方式 6.2.1 公有继承 公有继承的特点: (1) 基类的私有成员不能被派生类的函数成员访问 (2) 基类的公有成员和保护成员在派生类中的访问权限不变 分析例6.1 基类CLocation中的公有成员Getx()、Gety()和 MoveTo(),在派生类CPoint中的访问权限仍然是公有的。 而x,y是基类CLocation的私有成员,在派生类CPoint的成 员函数中不能访问。如果将CPoint类的成员函数Show()改写成 下面的形式: void CPoint::Show() { cout << x << "," << y << " " << Color << endl ; } 第7章 继承与派生 错误信息:“不能访问CLocation类中 的私有成员x,y
第7章继承与派生 6.2类的继承方式 62.1公有继承(续一) 若将基类 CLocation中的X,y改成保护成员,即 class clocation protected int x 将x,y改为保护成员后,上面的 showO Int y, 就可以直接访问成员x和y了 public int GetXo int Geto void Move To(int x, int y) CLocation(int X=0, int y=0)
6.2 类的继承方式 6.2.1 公有继承(续一) 若将基类CLocation中的x,y改成保护成员,即: class CLocation { protected: int x; int y; public: int Getx(); int Gety(); void MoveTo(int x, int y); CLocation(int x=0, int y=0); }; 第7章 继承与派生 将x,y改为保护成员后,上面的show() 就可以直接访问成员x和y了