恩恩,我又来提问了

小白在此 2014-04-22 10:02:01
#include <iostream>
#include <stdio.h>
using namespace std;
class Time
{
public:
Time(int h=1,int m = 2,int s = 3)
{
hour = h;
minute = m;
second = s;
}
void set_time();
friend void show_time(Time&);
private:
static int p;
int hour;
int minute;
int second;
};
int Time::p = 12;

int main()
{
Time st1(12,46,23);
Time st2(st1);
show_time(st2);
cout << Time::p << endl;
cout << st1.p << endl;
cout <<st2.p << endl;
return 0;
}

void show_time(Time &t)
{
cout << t.hour << ":" << t.minute << ":" << t.second << endl;
}


将static int p;放在私有区就报错,放在共有区就行,我用的是mingw编译器,是codeblocks自带的,但是用vs2012就不会报错,能解决吗
...全文
140 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
枯木_叶 2014-04-23
  • 打赏
  • 举报
回复
static只是说明该变量被赋值后不会被改变,还是要遵守类的规则
lm_whales 2014-04-22
  • 打赏
  • 举报
回复
引用 楼主 u013545836 的回复:
#include <iostream> #include <stdio.h> using namespace std; int main() { Time st1(12,46,23); Time st2(st1); show_time(st2); /***** 这里有问题,类的私有成员变量,是不可直接访问的**********/ cout << Time::p << endl;//错误, 直接访问的私有成员 cout << st1.p << endl;//错误,直接访问的私有成员 cout <<st2.p << endl;//错误,直接访问的私有成员 return 0; } void show_time(Time &t) { cout << t.hour << ":" << t.minute << ":" << t.second << endl; } 将static int p;放在私有区就报错,放在共有区就行,我用的是mingw编译器,是codeblocks自带的,但是用vs2012就不会报错,能解决吗
私有成员,不论是否静态,由于存取权限为私有, 所以都不可直接访问,要提供(公有)成员函数来访问.
YCMyTot 2014-04-22
  • 打赏
  • 举报
回复
额。。 我用的是DEV-c++ 编的 static int p; 放在了 public 时,可以编译;我在想 你好像没有定义对私有成员 p的操作 函数吧!!! 不知道这样对不对???
01世界里遨游 2014-04-22
  • 打赏
  • 举报
回复
虽然static变量其生命周期是整个文件,但其在类中声明时,同样要遵守类的成员访问规则,即类的私有成员仅能被类成员访问,而不能被类用户访问。当然,static变量特殊的地方在于,当它为private属性时,它仅能被类的静态成员函数和类的普通成员函数访问。因此,可以采用这两种函数来调用static变量,或将其属性改为public。
mujiok2003 2014-04-22
  • 打赏
  • 举报
回复
引用
将static int p;放在私有区就报错,放在共有区就行,
那是当然。 这也是private和public的区别。
王梦辉_1234 2014-04-22
  • 打赏
  • 举报
回复
1.只有静态函数调用静态变量 2.private:这个的权限是不直接访问的,你定义的“static int p:”是想要数据共享,你觉得可能不?(如果可能那干吗还要封装数据的) 如果想要实现“static int p”的数据操作,就定义两个函数静态函数(static int get_p(); static void set_p(int a)) 调用的时候就调用函数把 建议就这一点 ,看看能不能帮你(我没用过,你自己试试吧)。

64,671

社区成员

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

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