请教const,static和const static的问题

cherrychangxia 2013-04-02 11:28:53
请详细解答一下下面的题,本人是菜鸟,越详细越好,谢谢
Fill the blanks inside class definition

Class Test

{

public:

_____ int a;

_____ int b;

public:

Test::Test(int _a, int _b):a(_a)

{

b = _b;

}

};

int Test::b;

int _tmain(int argc, _TCHAR * argv[])

{

Test t1(0, 0), t2(1, 1);

t1.b = 10;

t2.b = 20;

printf("%u %u %u %u", t1.a ,t1.b ,t2.a, t2.b);

return 0;

}

Running result: 0 20 1 20

A. static/const

B. const/static

C. --/static

D.const static/static

E. None of the above

Answer:BC
...全文
221 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cherrychangxia 2013-04-03
  • 打赏
  • 举报
回复
谢谢各位的回答,衷心感谢,我现在懂了
wjain 2013-04-02
  • 打赏
  • 举报
回复
引用 3 楼 cherrychangxia 的回复:
引用 1 楼 ywj1225 的回复:C/C++ code?123456789101112131415161718192021222324252627282930313233343536373839404142Class Test { public: _____ int a; _____ int b; public: ……
你最好是自己把变量前加上不同的修饰符编译一下试试。 编译器会告诉你答案的·~
yubao669016 2013-04-02
  • 打赏
  • 举报
回复
因为结果b都是20,对b的最后一次赋值就是赋得20,符合static变量,对于static变量你要记住两点1所有的对象拥有共同的static变量,2static变量的初始化应在类外,并且形式为 类型名 类名::变量名 对于类中的const变量在构造函数中的初始化必须要用初始化列表的形式,对于一般的变量则可以用初始化列表的形式,也可以不使用初始化列表的形式,所以答案是BC
赵4老师 2013-04-02
  • 打赏
  • 举报
回复
不要纠结各种常量了,这个世界上唯一不变的就是变化。用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢!
ghost5216 2013-04-02
  • 打赏
  • 举报
回复
引用 3 楼 cherrychangxia 的回复:
引用 1 楼 ywj1225 的回复:C/C++ code?123456789101112131415161718192021222324252627282930313233343536373839404142Class Test { public: _____ int a; _____ int b; public: ……
Test t1(0, 0), t2(1, 1); ---->t1.a = 0 t2.a =1 你先让 const int a; 在main中Test t1(0, 0), t2(1, 1);之后加t1.a=3;t2.a=3;试试 在删除const 试试。
cherrychangxia 2013-04-02
  • 打赏
  • 举报
回复
引用 1 楼 ywj1225 的回复:
C/C++ code?123456789101112131415161718192021222324252627282930313233343536373839404142Class Test { public: _____ int a; _____ int b; public: Test::Test(i……
"a通过初始化列表赋值,而且值再未发生变化,所以a可能是const的,也可能不是。"这句话不太明白,a在后面不是改变了吗?t1和t2的a都不一样吗?还有为什么a不改变就可能是const也可能不是,谢谢大神的再次回答,谢谢
seuduck 2013-04-02
  • 打赏
  • 举报
回复
能够判断的就是b的值, 注意到t1.b的值随着t2.b的值一起更改了。 所以能够判断它是static的, static是被该类所有对象共享的变量。 至于a的修饰const或者为空都是可以的 如果a是const修饰的话,a的初始化只能像下面的代码一样了。 如果也放在跟b一起的位置是会报错的
Test::Test(int  _a, int  _b):a(_a)
           {
                    b = _b;
           }
可能说的不清楚,不过我的理解就是这样
wjain 2013-04-02
  • 打赏
  • 举报
回复
Class Test

{

public:

           _____  int a;

           _____  int b;

public:

          Test::Test(int  _a, int  _b):a(_a)

           {
                 // a通过初始化列表赋值,而且值再未发生变化,所以a可能是const的,也可能不是。
                 b = _b;

           }

};

int Test::b;     // b在类外定义,通过类名引用,b一定是static的。
                 // a没有如此在类外定义,a一定不是static的。

int   _tmain(int  argc, _TCHAR * argv[])

{

          Test    t1(0,  0),  t2(1, 1);

           t1.b = 10;

           t2.b = 20;

           printf("%u  %u  %u  %u", t1.a ,t1.b ,t2.a, t2.b);

           return 0;

}

// Running result:  0   20   1   20

64,642

社区成员

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

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