游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2842|回复: 10

另一个C++问题

[复制链接]

33

主题

669

帖子

669

积分

高级会员

Rank: 4

积分
669
QQ
发表于 2004-8-8 11:09:00 | 显示全部楼层 |阅读模式
class A
{
protected:
int  data1,data2;
};
#include"A.h"
class B:class A
{
protected:
A *a;
public:
B::B() : A()
{
    a=new A();
}
void  B:: C()
{
   
   a.data1=10;
}


};

我的问题是为什么在B中的A指针不能访问A中的protected data member
编译器指出是 "can' not access protected data member"这类信息


[em7]

1

主题

66

帖子

78

积分

注册会员

Rank: 2

积分
78
发表于 2004-8-8 11:27:00 | 显示全部楼层

Re:另一个C++问题

应该是a->data1=10;
但是对于不是public类型的内部变量是不能这样访问的

20

主题

473

帖子

502

积分

高级会员

Rank: 4

积分
502
发表于 2004-8-8 12:51:00 | 显示全部楼层

Re:另一个C++问题

既然是protected
那就自然就不能在类外部访问

30

主题

398

帖子

403

积分

中级会员

Rank: 3Rank: 3

积分
403
QQ
发表于 2004-8-8 13:09:00 | 显示全部楼层

Re:另一个C++问题

应该先看完语法再说....
基本的东西要弄懂的还是要弄懂..
要不然写了一个函数没有掉用的时候,不要说:"怎么没有效果呢?"

汗!!


109

主题

1451

帖子

1475

积分

金牌会员

女神

Rank: 6Rank: 6

积分
1475
发表于 2004-8-8 13:46:00 | 显示全部楼层

Re:另一个C++问题

既然是protected
那就自然就不能在类外部访问
派生类虽然不能访问基类中的私有成员,但是应该可以访问基类中受保护的成员吧...

33

主题

669

帖子

669

积分

高级会员

Rank: 4

积分
669
QQ
 楼主| 发表于 2004-8-8 14:47:00 | 显示全部楼层

Re:另一个C++问题

a->data1是我写错了
但我好象记的protected的语法是派生类能访问,而在外部类里不能访问,而private的语法是外部和派生类里都不能访问,public的语法是完全能够访问,请不要弄错了 

33

主题

669

帖子

669

积分

高级会员

Rank: 4

积分
669
QQ
 楼主| 发表于 2004-8-8 14:51:00 | 显示全部楼层

Re:另一个C++问题

  在补充一点,我的编译器是VC6.0,正常情况下派生类访问基类的protected是可以的

33

主题

669

帖子

669

积分

高级会员

Rank: 4

积分
669
QQ
 楼主| 发表于 2004-8-8 15:55:00 | 显示全部楼层

Re:另一个C++问题

我打错了,原先是public继承,我那里少打字了,在论坛上写程序有点不习惯
public继承也是那样的错误,楼上的是我把你误导了
class A
{
protected:
int  data1,data2;
};
#include"A.h"
class B:public class A
{
protected:
A *a;
public:
B::B() : A()
{
    a=new A();
}
void  B:: C()
{
   
   a->data1=10;
}


};
这是错误仍然存在,但如果用派生类对象可以访问protected成员,在派生类里用基类对象却不能访问,是public继承,另外,编译器明确指出是无法访问protected成员,换成public 就正确了

30

主题

276

帖子

276

积分

中级会员

Rank: 3Rank: 3

积分
276
发表于 2004-8-8 16:20:00 | 显示全部楼层

Re:另一个C++问题

晕,刚发现自己错了,正准备修改帖子就 . . .
对 其他类对象成员函数,数据的.和->调用 都是被视做 外部访问的
这个C++的考虑 我想可能是基于
允许了以后会产生这样的混乱局面。
class A
{ proected: int i};
class B : public A{ fuc(A* p){ p->i;}};
我的书都没带回来,查不到,也只能自己猜
不过你真要外部访问的话
需要的是friend这个关键字。

30

主题

276

帖子

276

积分

中级会员

Rank: 3Rank: 3

积分
276
发表于 2004-8-8 16:23:00 | 显示全部楼层

Re:另一个C++问题

上一篇在这里.
---------------------------
class B:class A
---------------------------

c++ 标准里 class的缺省继承是private的.

class B:class A == class B : private A
另外 这个class A 的class 是可以省略的.== class B : A


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-8-14 17:21

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表