注册 登录
编程论坛 C++教室

静态私有成员访问问题!

adaliuliu 发布于 2006-09-26 19:32, 3303 次点击

#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编辑过]

13 回复
#2
chenjun7992006-09-26 21:40

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

#3
song42006-09-26 21:51
子类函数不能访问
#4
flypampas2006-09-27 01:20

只有本类才能访问啊!

#5
adaliuliu2006-09-27 08:54
我是用g++编译的,当a不是static类型时会报错,难道是编译器的问题?

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

#6
天使坠落的眼泪2006-09-27 10:12
在子类中访问的时候,要使用子类去调用父类的公共函数才能够去调用父类的私有成员值
#7
adaliuliu2006-09-27 12:55
可是明明结果是悖论啊,该怎么解释?(我是在LINUX下用g++编译的)而且,如果在构造函数中初始化a而不是在类外,则编译器会报错。。

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


#8
ada_liu2006-09-28 08:55
没人能解决这个问题吗?各位大侠露面啊!
#9
雨夜微醺2006-10-12 20:34
我的编译其报错了,反正是不能访问就对了。


#10
我不是郭靖2006-10-12 21:17

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

[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]

#11
雨夜微醺2006-10-12 21:41
没有错!
#12
stophin2012-11-05 18:07
以下是引用adaliuliu在2006-9-27 12:55:10的发言:

可是明明结果是悖论啊,该怎么解释?(我是在LINUX下用g++编译的)而且,如果在构造函数中初始化a而不是在类外,则编译器会报错。。
[此贴子已经被作者于2006-9-27 13:46:43编辑过]

静态成员只能在类外初始化的,如果有.h和.cpp文件,则只能在.cpp文件中初始化不能在.h中初始化。使用的话需要加上域符,看一下这篇文章
http://
1