class Derived: public Base∥以公有方式继承基类 Ipublic void SetXY(int X, int Y)(SetX(X); SetY(Y):] ∥使用基类接口函数设置数据 void SetAB(int A, int B)a=A; b=B 派生类可以直接访问基类的保护数据 void SetMN(int M, int N)mEM; n=N,I 派生类可以直接访问基类的公有数据 int GetSumXYO ireturn(GetXo+GetY(0):] ∥使用基类接口函数提取数据 int GetSumABO return(a+b);] ∥派生类可以直接访问基类的保护数据 int GetSumMNO return(m+n):] 派生类可以直接访问基类的公有数据
class Derived:public Base //以公有方式继承基类 {public: void SetXY(int X, int Y) {SetX(X); SetY(Y);} //使用基类接口函数设置数据 void SetAB(int A, int B) {a=A; b=B;} //派生类可以直接访问基类的保护数据 void SetMN(int M, int N) {m=M; n=N;} //派生类可以直接访问基类的公有数据 int GetSumXY() {return (GetX()+GetY());} //使用基类接口函数提取数据 int GetSumAB() {return (a+b);} //派生类可以直接访问基类的保护数据 int GetSumMN() {return (m+n);} //派生类可以直接访问基类的公有数据 }; 16
int maino Derived objD; objD SetXY(1, 2); objD. SetAB (10, 20); objD. SetMN(100, 200) cout<"X+Y=”<≤objD.x+objD.y< <end:; 派生类对象不能直接访问私有数据 cout<"A+B="<< objD. atobjD b≤≤endl; 派生类对象不能直接访问保护数据 cout<< M+Ne<<objD. mtobjD n<<endl; 派生类对象可以直接访问公有数据 return 0:
int main() { Derived objD; objD.SetXY(1,2); objD.SetAB(10,20); objD.SetMN(100,200); cout<<"X+Y="<<objD.x+objD.y<<endl; //派生类对象不能直接访问私有数据 cout<<"A+B="<<objD.a+objD.b<<endl; //派生类对象不能直接访问保护数据 cout<<"M+N="<<objD.m+objD.n<<endl; //派生类对象可以直接访问公有数据 return 0; } 17
C++语言程序设计 私有继承( private) 类 成●基类的pubc和 protected成员都以 员 private身份出现在派生类中,但基类 的 private成员不可直接访问。 万 派生类中的成员函数可以直接访问基 类中的pub|ic和 protected成员,但 控 不能直接访问基类的 private成员。 制·通过派生类的对象不能直接访问基类 中的任何成员 大x 18
C++语言程序设计 18 私有继承(private) ⚫ 基类的public和protected成员都以 private身份出现在派生类中,但基类 的private成员不可直接访问。 ⚫ 派生类中的成员函数可以直接访问基 类中的public和protected成员,但 不能直接访问基类的private成员。 ⚫ 通过派生类的对象不能直接访问基类 中的任何成员。 类 成 员 的 访 问 控 制
C++语言程序设计 例私有继承举例 include <iostream> using namespace std; class Base i int x, y ∥有数据成员 protected int a, b, ∥保护数据成员 public int mns ∥公有数据成员 void setx(intX){x=X为私有数据成员设置接口 void SetY(int Y){y=Y;}为私有数据成员设置接口 int Getx0 return x;}∥为私有数据成员设置接口」 int GetY((return y;}∥为私有数据成员设置接口 }
C++语言程序设计 19 例 私有继承举例 #include <iostream> using namespace std; class Base { int x,y; //私有数据成员 protected: int a,b; //保护数据成员 public: int m,n; //公有数据成员 void SetX(int X) {x=X;}//为私有数据成员设置接口 void SetY(int Y) {y=Y;}//为私有数据成员设置接口 int GetX(){return x;} //为私有数据成员设置接口 int GetY(){return y;} //为私有数据成员设置接口 };
c| ass Derived: private Base∥以私有方式继承基类 ipublic void SetXY(int X, int Y)(SetX(X); SetY():] ∥使用基类接口函数设置数据 void SetAB(int A, int B)a=A; b=B;] 派生类可以直接访问基类的保护数据(派生类的私有数据) void SetMN(int M, int N)mEM; n=N,I 派生类可以直接访问基类的公有数据(派生类的私有数据) int GetSumXYO [return(GetX0+GetY():] ∥使用基类接口函数提取数据 int GetSumABO return(a+b);] 派生类可以直接访问基类的保护数据(派生类的私有数据) int GetSumMNO return(m+n):] 派生类可以直接访问基类的公有数据(派生类的私有数据)
class Derived:private Base //以私有方式继承基类 {public: void SetXY(int X, int Y) {SetX(X); SetY(Y);} //使用基类接口函数设置数据 void SetAB(int A, int B) {a=A; b=B;} //派生类可以直接访问基类的保护数据(派生类的私有数据) void SetMN(int M, int N) {m=M; n=N;} //派生类可以直接访问基类的公有数据(派生类的私有数据) int GetSumXY() {return (GetX()+GetY());} //使用基类接口函数提取数据 int GetSumAB() {return (a+b);} //派生类可以直接访问基类的保护数据(派生类的私有数据) int GetSumMN() {return (m+n);} //派生类可以直接访问基类的公有数据(派生类的私有数据) }; 20