(转)public、protect、private继承方式 C++

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)

C++" name="image_operate_12281341836757359"
alt="public、protect、private继承方式 C++" src="http://s9.sinaimg.cn/middle/aac2c03a07a0a109d8f58&690">

(转)public、protect、private继承方式 C++,布布扣,bubuko.com

时间: 2024-12-20 10:06:38

(转)public、protect、private继承方式 C++的相关文章

public/protect/private和公有继承/保护继承/私有继承的简单理解

一.先来看一下没有继承的情况 类中的变量访问: (1)类内访问方式:通过public成员函数访问 (2)类外访问方式:直接访问 表 1 class A { public: int a; protected: int b; private: int c; public: int getAll(){ return a + b + c; } }; int main() { A testA; //类外访问方式 testA.a; testA.b; testA.c; //类内访问方式 testA.getAl

c++ public protected private 继承

1:访问控制 1.1 public 这类型成员可以被类本身函数访问,也可以被外部创建的类对象调用.子类对象与子类内部可以访问 1.2 protected类型成员,只能被类本身函数访问.外部创建的类对象没有访问权限.子类对象没有访问权限,子类内部可以访问 1.3 private类型成员,只能被类本身函数访问,外部创建的类对象没有访问权限.子类对象和子类内部都没有访问权限 class TestObject{ public: void Function(); void TestPublic(); pr

12 周 长颈鹿类对动物类的继承 private继承方式下

#include <iostream> using namespace std; class Animal { public: Animal() {} void eat() { cout << "eat\n"; } protected: void play() { cout << "play\n"; } private: void drink() { cout << "drink\n"; } };

public,protect,private访问权限

第一:private, public, protected 访问标号的访问范围. private:只能由1.该类中的函数.2.其友元函数访问.不能被任何其他访问,该类的对象也不能访问. protected:可以被1.该类中的函数.2.子类的函数.以及3.其友元函数访问.但不能被该类的对象访问. public:可以被1.该类中的函数.2.子类的函数.3.其友元函数访问,也可以由4.该类的对象访问. 注:友元函数包括3种:设为友元的普通的非成员函数:设为友元的其他类的成员函数:设为友元类中的所有成员

[C++]访问控制与继承(public,protect,private) 有时间再整理!!!

http://www.cnblogs.com/chio/archive/2007/06/11/779408.html http://www.cnblogs.com/SelaSelah/archive/2012/08/12/2634256.html http://www.cnblogs.com/BeyondAnyTime/archive/2012/05/23/2514964.html http://bbs.csdn.net/topics/380193036 http://www.cnblogs.c

7,C++ public, protected, private 继承的区别

在某处看到一张图,简单明了的说明了三者的关系,很是佩服,遂记录下来. //公有继承 对象访问 成员访问 public --> public Y Y protected --> protected N Y private --> private N N //保护继承 对象访问 成员访问 public --> protected N Y protected --> protected N Y private --> protected N N //私有继承 对象访问 成员访

public protect private

这个问题 应该很老了,但是确实是重点中的重点,如果没有真正的都用过这些修饰符,其实对其的作用并不深刻,我也没用过默认的修饰符,所以有时候也总把friendly和protected搞混,还因为这个丢失了一次很好的工作机会,随意今天又重新弄了一下跟大家分享,没事自己就看看. (1)对于public修饰符,它具有最大的访问权限,可以访问任何一个在CLASSPATH下的类.接口.异常等.它往往用于对外的情况,也就是对象或类对外的一种接口的形式. (2)对于protected修饰符,它主要的作用就是用来保

C++学习15 继承权限和继承方式

C++继承的一般语法为: class 派生类名:[继承方式] 基类名{ 派生类新增加的成员 }; 继承方式限定了基类成员在派生类中的访问权限,包括 public(公有的).private(私有的)和 protected(受保护的).此项是可选的,如果不写,默认为 private 或 protected. 1) public继承方式 基类中所有public成员在派生类中为public属性: 基类中所有protected成员在派生类中为protected属性: 基类中所有private成员在派生类中

3.2 C++继承方式

参考: http://www.weixueyuan.net/view/6359.html  总结: 子类继承父类,继承方式将限制父类的成员属性在子类中的访问权限,子类访问父类的成员,也需要遵循其成员的访问权限,如 private 修饰的成员只能在当前类中使用,子类不能访问. 同时父类的成员也是子类的成员,其在子类中的访问权限由父类中的访问权限及继承方式决定. 3) private继承方式 基类中的所有public成员在派生类中均为private属性: 基类中的所有protected成员在派生类中