| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3303 人关注过本帖
标题:静态私有成员访问问题!
只看楼主 加入收藏
adaliuliu
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-8-21
收藏
 问题点数:0 回复次数:13 
静态私有成员访问问题!

#include"iostream.h"

class A
{
public:
A(int y){d=y;}
void print_a(){cout<<a<<d<<endl;}
private:
static int a;//静态私有数据
protected:
int d;
};
int A::a=10;

class B:public A
{
public:
B(int x,int z):A(x){b=z;c=z*d;}
void print_b(){cout<<a<<b<<c<<endl;} //为什么不报错?
private:
int b;
protected:
int c;
};

int main()
{
B d(100,20);
d.print_a();
d.print_b();
}
程序正常运行,可是a是基类的私有成员变量,继承类却可以访问它,不知道为什么,难道静态成员例外?

[此贴子已经被作者于2006-9-26 19:34:07编辑过]

搜索更多相关主题的帖子: 静态 成员 访问 
2006-09-26 19:32
chenjun799
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2006-8-25
收藏
得分:0 

我在vc6.0下,就提示不能访问a啊!

2006-09-26 21:40
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
子类函数不能访问

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-09-26 21:51
flypampas
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2006-9-16
收藏
得分:0 

只有本类才能访问啊!


java,c++...thinking......
2006-09-27 01:20
adaliuliu
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-8-21
收藏
得分:0 
我是用g++编译的,当a不是static类型时会报错,难道是编译器的问题?

[此贴子已经被作者于2006-9-27 9:06:48编辑过]

2006-09-27 08:54
天使坠落的眼泪
Rank: 2
等 级:新手上路
威 望:5
帖 子:204
专家分:0
注 册:2006-5-16
收藏
得分:0 
在子类中访问的时候,要使用子类去调用父类的公共函数才能够去调用父类的私有成员值

樹欲靜而風不止... http://blog./seablue_xj
2006-09-27 10:12
adaliuliu
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-8-21
收藏
得分:0 
可是明明结果是悖论啊,该怎么解释?(我是在LINUX下用g++编译的)而且,如果在构造函数中初始化a而不是在类外,则编译器会报错。。

[此贴子已经被作者于2006-9-27 13:46:43编辑过]


2006-09-27 12:55
ada_liu
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-8-21
收藏
得分:0 
没人能解决这个问题吗?各位大侠露面啊!
2006-09-28 08:55
雨夜微醺
Rank: 1
等 级:新手上路
威 望:1
帖 子:147
专家分:0
注 册:2006-9-25
收藏
得分:0 
我的编译其报错了,反正是不能访问就对了。



我若想到你就有种莫名的开心 我一见到你就有种莫名的悸动
2006-10-12 20:34
我不是郭靖
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:494
专家分:6
注 册:2006-10-4
收藏
得分:0 

访问是能访问的,但要加上作用域算符::

[QUOTE]

#include"iostream.h"

class A
{
public:
A(int y){d=y;}
void print_a(){cout<<a<<d<<endl;}
private:
static int a;//静态私有数据
protected:
int d;
};
int A::a=10;

class B:public A
{
public:
B(int x,int z):A(x){b=z;c=z*d;}
void print_b(){cout<<A::a<<b<<c<<endl;} //为什么不报错?
private:
int b;
protected:
int c;
};

int main()
{
B d(100,20);
d.print_a();
d.print_b();
}


[/QUOTE]


2006-10-12 21:17
快速回复:静态私有成员访问问题!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024810 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved