(转)public、protect、private继承方式 C++
2020-11-28 09:13
标签:style blog class tar color get C里面的结构体内的成员不受任何机制保护,直接能用,比如StructtypeA.x;StructtypeA.y;StructtypeA.fun(); 而c++则不同,c++的类像强化型的结构体 public公有继承 protected保护继承 private私有继承 我们知道类的private和protected成员,在类外是不可以使用的.只有public成员可以在类外直接使用. 公有继承时,基类的private成员派生类也不可用,基类的public和protected成员在派生类中可直接使用.继承过来(变成派生类相应的public和protected成员)只有public成员在派生类外可以直接使用. 保护继承时,基类的private成员仍为有私有.基类的public和protected成员变成派生类的protected成员,这时在派生类外也不能直接使用原基类的public成员 私有继承时,基类的private成员仍为有私有.基类的public和protected成员将变成派生类的private成员. 举个例子. class A { public: int m_nTelNum; protected: int m_nAge; private: int m_nMoney; }; class B : public A { void SetTelNum(int nTelNum) { m_nTelNum=nTelNum; } void SetAge(int nAge) { m_nAge=nAge; } void SetMoney(int nMoney) { m_nMoney=nMoney; } //这里就出现错误,因为基类的private成员不能用. }; B objB; //创建B类的对象objB objB.m_nTelNum=123456;//可以 objB.m_nAge=30; //错误. public继承中基类的protected在派生类中是protected objB.m_nMoney=100; //更错误,在派生类中都不可以直接使用.在类外就更不能了. class C : protected A { void SetTelNum(int nTelNum) { m_nTelNum=nTelNum; } void SetAge(int nAge) { m_nAge=nAge; } void SetMoney(int nMoney) { m_nMoney=nMoney; } //这里就出现错误,因为这是基类的private成员不能用. }; C objC;//创建C类的对象objC objC.m_nTelNum=123456;//注意这里和public的区别,这里错误,m_nTelNum变成了C类的protected成员 objC.m_nAge=30;//错误.protected继承中基类的protected在派生类中是protected,这与public同相 objC.m_nMoney=100;//更错误,在派生类中都不可以直接使用.在类外就更不能了. class D : private A { void SetTelNum(int nTelNum) { m_nTelNum=nTelNum; } void SetAge(int nAge) { m_nAge=nAge; } void SetMoney(int nMoney) { m_nMoney=nMoney; //这里就出现错误,因为这是基类的private成员不能用. } }; D objD;//创建D类的对象 objD objD.m_nTelNum=123456;//错误,m_nTelNum变成了D类的private成员 objD.m_nAge=30;//错误.private继承中基类的protected在派生类中是private objD.m_nMoney=100;//更错误,在派生类中都不可以直接使用.在类外就更不能了. 从例子来看,三种继承从派生类内部引用来看好像没有区别,只在类外引用时表现不同.现在还看不出public和protected继承的区别 那再看一个例子. class E:public B { void SetTelNum(int nTelNum) { m_nTelNum=nTelNum;//可以 因为这是B的公有成员 } void SetAge(int nAge) { m_nAge=nAge;//可以 因为这是B的保护成员,现成变成E的protected成员 } void
SetMoney(int nMoney) { m_nMoney=nMoney;//这个肯定不可以! } }; E objE; objE.m_nTelNum=123456;//可以 //其它的两个就不能用了. class F:public C { void SetTelNum(int nTelNum) { m_nTelNum=nTelNum;//可以 因为这是C的保护成员,这里与public继承已经有区别但还没有表现出来 } void SetAge(int nAge) { m_nAge=nAge;//可以 因为这是C的保护成员,现成变成E的protected成员 } void SetMoney(int nMoney) { m_nMoney=nMoney;//这个肯定不可以! } }; F objF; objF.m_nTel=123456;//错误,因为这是F的保护成员.注意与E类区别 class G : public D { void SetTelNum(int nTelNum) { m_nTelNum=nTelNum;//不可以 因为这是D的private成员,注意这里区别 } void SetAge(int nAge) { m_nAge=nAge;//不可以 因为这是D的private成员,注意区别 } void SetMoney(int nMoney)
(转)public、protect、private继承方式 C++,搜素材,soscw.com (转)public、protect、private继承方式 C++ 标签:style blog class tar color get 原文地址:http://www.cnblogs.com/encode/p/3704393.html
文章标题:(转)public、protect、private继承方式 C++
文章链接:http://soscw.com/index.php/essay/23095.html