c++源码分析继承问题
来源:互联网 发布:搜索引擎 数据库 区别 编辑:程序博客网 时间:2024/06/05 14:44
//c++的继承问题,有问题请留言
#include <iostream>
using namespace std;
class parent
{
public:
parent(int var = -1)
{
m_nPub = var;
m_nPtd = var;
m_nPrt = var;
}
public:
int m_nPub;
protected:
int m_nPtd;
private:
int m_nPrt;
};
class Child1 :public parent
{
public:
int GetPub() { return m_nPub; }
int GetPtd() { return m_nPtd; }
int GetPrt() { return m_nPrt; }//A 错误,父类私有的成员对子类是隐藏的,在子类中不可以直接访问
};
class Child2 :protected parent
{
public:
int GetPub() { return m_nPub; }
int GetPtd() { return m_nPtd; }
int GetPrt() { return m_nPrt; }//B 错误,不管以何种继承方式,父类私有的成员对子类是隐藏的
};
class Child3 :private parent
{
public:
int GetPub() { return m_nPub; }
int GetPtd() { return m_nPtd; }
int GetPrt() { return m_nPrt; }//C 错误,不管以何种继承方式,父类私有的成员对子类是隐藏的
};
//由上面的分析可以知道,不管以何种继承方式,父类的public和protected成员在子类中都是可以被访问的,私有成员都是隐藏的
int main()
{
Child1 cd1;
Child2 cd2;
Child3 cd3;
int nVar = 0;
//public inherited
cd1.m_nPub = nVar;//D 正确
cd1.m_nPtd = nVar;//E 错误,m_nPtd是父类的保护成员,可以被公有继承的子类访问,但是不能修改
nVar = cd1.GetPtd();//F 正确,可以通过函数访问父类的成员,并且赋值
//protected inherited
cd2.m_nPub = nVar;//G 错误 cd2是保护继承的,不可以直接修改父类的公有变量
nVar = cd2.GetPtd();//H 正确,可以通过函数访问父类的保护变量
//private inherited
cd3.m_nPub = nVar;//I 错误,cd3是私有继承的不可以直接修改父类的公有变量
nVar = cd3.GetPtd();//J 正确,可以通过函数访问父类的保护变量
//由上面的代码可以知道,父类的公有成员虽然都可以访问,但是只有公有继承的子类才可以直接修改
//父类的protected成员任何继承方式的子类都不可以修改,而且访问的方式只能是通过自己的成员函数,
//父类的private成员,任何方式都不能修改和访问
}
#include <iostream>
using namespace std;
class parent
{
public:
parent(int var = -1)
{
m_nPub = var;
m_nPtd = var;
m_nPrt = var;
}
public:
int m_nPub;
protected:
int m_nPtd;
private:
int m_nPrt;
};
class Child1 :public parent
{
public:
int GetPub() { return m_nPub; }
int GetPtd() { return m_nPtd; }
int GetPrt() { return m_nPrt; }//A 错误,父类私有的成员对子类是隐藏的,在子类中不可以直接访问
};
class Child2 :protected parent
{
public:
int GetPub() { return m_nPub; }
int GetPtd() { return m_nPtd; }
int GetPrt() { return m_nPrt; }//B 错误,不管以何种继承方式,父类私有的成员对子类是隐藏的
};
class Child3 :private parent
{
public:
int GetPub() { return m_nPub; }
int GetPtd() { return m_nPtd; }
int GetPrt() { return m_nPrt; }//C 错误,不管以何种继承方式,父类私有的成员对子类是隐藏的
};
//由上面的分析可以知道,不管以何种继承方式,父类的public和protected成员在子类中都是可以被访问的,私有成员都是隐藏的
int main()
{
Child1 cd1;
Child2 cd2;
Child3 cd3;
int nVar = 0;
//public inherited
cd1.m_nPub = nVar;//D 正确
cd1.m_nPtd = nVar;//E 错误,m_nPtd是父类的保护成员,可以被公有继承的子类访问,但是不能修改
nVar = cd1.GetPtd();//F 正确,可以通过函数访问父类的成员,并且赋值
//protected inherited
cd2.m_nPub = nVar;//G 错误 cd2是保护继承的,不可以直接修改父类的公有变量
nVar = cd2.GetPtd();//H 正确,可以通过函数访问父类的保护变量
//private inherited
cd3.m_nPub = nVar;//I 错误,cd3是私有继承的不可以直接修改父类的公有变量
nVar = cd3.GetPtd();//J 正确,可以通过函数访问父类的保护变量
//由上面的代码可以知道,父类的公有成员虽然都可以访问,但是只有公有继承的子类才可以直接修改
//父类的protected成员任何继承方式的子类都不可以修改,而且访问的方式只能是通过自己的成员函数,
//父类的private成员,任何方式都不能修改和访问
}
阅读全文
0 0
- c++源码分析继承问题
- C++/C源码分析
- Libev源码分析01:Libev中的监视器结构(C结构体实现继承)
- syscore.c 源码分析
- C-Ruby源码分析
- word2vec.c源码分析
- ngx_rtmp_notify_module.c 源码分析
- helloworld.c源码分析
- c ++中继承问题小结
- 6174问题 C源码
- redis dict.c源码分析
- goahead源码分析webs.c
- ashmem.c驱动源码分析
- C-Ruby源码分析-1
- init/main.c源码分析
- 4. gstimxv4l2src.c源码分析
- word2vec 源码分析word2vec.c
- 【C++】菱形继承与虚拟菱形继承的对比分析
- 表篇(二)-----单链表的创建与使用(c语言版)
- C++ 循环
- BZOJ2002: [Hnoi2010]Bounce 弹飞绵羊
- 【FullCalendar】概叙(一)
- DFS-求全排列
- c++源码分析继承问题
- C++ 判断
- 驱动建模表无法创建原因详细分析
- nyoj21:bfs(三个水杯)
- 微信小程序 | 49,小程序入门集锦系列文章20篇
- FCN制作自己的数据集、训练和测试 caffe
- Android之LruCache使用和源码分析
- Optimal Milking POJ
- 数据分析介绍之六——单变量数据观察之汇总统计和箱线图