来一道C++的概念题

marrco2005 2007-02-10 05:36:20
void test();

class X
{
public:
int x;
};

class Y1 : public X
{
};

class Y2 : protected X
{
};

class Y3 : private X
{
};

class Y4 : private X
{
friend void test();
};

void test()
{
X *p = NULL;
Y1 y1;
Y2 y2;
Y3 y3;
Y4 y4;

p = &y1;......................(a)
y1.x = 7;.....................(b)

p = &y2;......................(c)
y2.x = 7;.....................(d)

p = &y3;......................(e)
y3.x = 7;.....................(f)

p = &y4;......................(g)
y4.x = 7;.....................(h)
}
===========================================
在 (a) -- (h) 这8条语句中,错误的是?
...全文
569 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
叶落无心 2007-02-12
  • 打赏
  • 举报
回复
p = &y2;......................(c)
y2.x = 7;.....................(d)
p = &y3;......................(e)
y3.x = 7;.....................(f)
p = &y4;......................(g)
d是错的
由于不是public继承,所以不算是X的子类,所以指针赋值是不对的
sinall 2007-02-12
  • 打赏
  • 举报
回复
p = &y4;......................(g) // 这句怎么解释啊?
y4.x = 7;.....................(h) // 这句没得说,友元可以访问私有变量。
lyrzhlgq 2007-02-12
  • 打赏
  • 举报
回复
为什么,没有人具体解释一下吗?结果很简单,但是为什么才是最重要得呀。我们不能只知其然,不知其所以然吧!!!!
toddzst 2007-02-12
  • 打赏
  • 举报
回复
g,h也是用的private的,但是由于存在友元函数,因此可以调用。
discory 2007-02-12
  • 打赏
  • 举报
回复
哪个解释详细点,学习中,还有,g,h也是用的private,怎么能通过,是不是friend的关系
逸学堂 2007-02-12
  • 打赏
  • 举报
回复
[N] N = 0,1,2,3,4,5,6,7,8
sarh2onacy 2007-02-12
  • 打赏
  • 举报
回复
与sinall() ( ) 同问。。。
ljsyy2oo8 2007-02-12
  • 打赏
  • 举报
回复
接分
qhgary 2007-02-12
  • 打赏
  • 举报
回复
楼上这么感觉像要饭的,:)
gubinary 2007-02-12
  • 打赏
  • 举报
回复
搞不懂
哪位给分析一下啊


对了,楼主给点分吧
sinall 2007-02-12
  • 打赏
  • 举报
回复
好题……y3不能复制给p,而y4却可以……
magicsutra 2007-02-12
  • 打赏
  • 举报
回复
cdef不对
taodm 2007-02-12
  • 打赏
  • 举报
回复
试一下不就知道了。
rickerliang 2007-02-12
  • 打赏
  • 举报
回复
lz把我们当编译器阿?
steven216 2007-02-12
  • 打赏
  • 举报
回复
关于访问控制问题:
类中的一个成员可以是:private protected public
1.如果一个成员是private ,它的名字将只能由其声明所在类的成员函数和友元使用
2.如果一个成员是protected,它的名字只能由其声明所在类的成员函数和友元,以及由该类的派生类的成员函数及友元使用
3.如果一个成员是public ,它的名字可以由任何函数使用

派生类与基类的继承权限(public protected private)
对于基类的访问描述符控制着对基类成员的访问,以及从派生类类型到基类类型的指针与引用转换。考虑从基类B派生出类D
1.如果B是private 基类,那么它的public 和protected成员只能由D的成员函数和友元访问。
只有D的成员和友元能将D* 转换到B*
2.如果B是protected 基类,那么它的public和protected成员只能由D的成员函数和友元,以及由D派生出的类的成员函数和友元访问。只有D的成员和支元以及由D派生出的类的成员和友元能将D* 转换到B*
3.如果B是public基类,那么它public成员可以由任何函数使用。除此之外,它的protected成员能由D的成员函数和友元,以及由D派生出的类的成员函数和友元访问,任何函数都能将D*转换到B*

所以说:steelfrog的答案是正确的



NoOne8 2007-02-10
  • 打赏
  • 举报
回复
protect和private继承会阻止基类指针和派生类指针的转换
长尾巴的悟空 2007-02-10
  • 打赏
  • 举报
回复
晕,真难懂
iambic 2007-02-10
  • 打赏
  • 举报
回复
大家的答案如此一致,那我就不用看题了。cdef都是错的,接分。
FingerStyle 2007-02-10
  • 打赏
  • 举报
回复
p = &y2;......................(c)
y2.x = 7;.....................(d)

p = &y3;......................(e)
y3.x = 7;.....................(f)
healer_kx 2007-02-10
  • 打赏
  • 举报
回复
(c)

y2.x = 7;//.....................(d)

p = &y3;//......................(e)
y3.x = 7;//.....................(f)


这四个不对...
加载更多回复(1)
本压缩包文件集锦了嵌入式C/C++开发编程技巧,高效编程技术探索,C/C++语言相关技术问的深层探索,并且对嵌入式C/C++程序员应聘常见面试进行了深入剖析,对嵌入式C/C++开发者编程修炼,提升自身的相关能力具有很要的作用。 文档包含如下内容: struct 深层探索. C++中extern "C"含义深层探索. C 语言高效编程的几招 想成为嵌入式程序员应知道的 0x10 个基本问 C 语言嵌入式系统编程修炼之一:背景篇 C 语言嵌入式系统编程修炼之二:软件架构篇 C 语言嵌入式系统编程修炼之三:内存操作 C 语言嵌入式系统编程修炼之四:屏幕操作 C 语言嵌入式系统编程修炼之五:键盘操作 C 语言嵌入式系统编程修炼之六:性能优化 C/C++语言 void 及void 指针深层探索 C/C++语言可变参数表深层探索 C/C++数组名与指针区别深层探索 C/C++程序员应聘常见面试深入剖析(1) C/C++程序员应聘常见面试深入剖析(2) 一道著名外企面试的抽丝剥茧 C/C++结构体的一个高级特性――指定成员的位数 C/C++中的近指令、远指针和巨指针 从两道经典试谈 C/C++中联合体(union)的使用. 基于 ARM 的嵌入式Linux 移植真实体验 基于 ARM 的嵌入式Linux 移植真实体验(1)――基本概念 基于 ARM 的嵌入式Linux 移植真实体验(2)――BootLoader 基于 ARM 的嵌入式Linux 移植真实体验(3)――操作系统 基于 ARM 的嵌入式Linux 移植真实体验(4)――设备驱动 基于 ARM 的嵌入式Linux 移植真实体验(5)――应用实例 深入浅出 Linux 设备驱动编程 1.Linux 内核模块 2.字符设备驱动程序 3.设备驱动中的并发控制 4.设备的阻塞与非阻塞操作

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧