|
网站首页
|
业界新闻
|
小组
|
威客
|
人才
|
下载频道
|
博客
|
代码贴
|
在线编程
|
编程论坛
|
登录
注册
短消息
我发表的主题
我参与的主题
我收藏的贴子
我上传的附件
我下过的附件
编辑个人资料
我的博客
用户控制面板
搜索
道具
恢复默认风格
碧海青天
秋意盎然
棕红预览
粉色回忆
蓝雅绿
紫色淡雅
青青河草
e点小镇
橘子红了
红红夜思
水晶紫色
雪花飘飘
新年快乐
风格
短消息
论坛展区
帮助
编程论坛
→
开发语言
→
C++论坛
→
『 C++教室 』
→ static成员能否被继承?
我的收件箱(0)
欢迎加入我们,一同切磋技术
用户名:
密 码:
共有
8027
人关注过本帖
标题:
static成员能否被继承?
只看楼主
加入收藏
sunkaidong
来 自:南京师范大学
等 级:
贵宾
威 望:
12
帖 子:4496
专家分:141
注 册:2006-12-28
第
11
楼
收藏
得分:0
Base::
这个用在类后面是表示作用域。。一般用在cpp文件中。。表示和在类体里面没有区别。。
学习需要安静。。海盗要重新来过。。
2008-06-09 20:52
举报帖子
使用道具
赠送鲜花
VanHorn
等 级:
新手上路
帖 子:152
专家分:0
注 册:2008-1-8
第
12
楼
收藏
得分:0
说是没区别。但是用起来实现不了。不信你试试。在VC6中就是有区别。在主函数里初始化静态成员就是不行。非要在主函数外面初始化。
我用VC++6我怕谁?
2008-06-10 12:16
举报帖子
使用道具
赠送鲜花
sunkaidong
来 自:南京师范大学
等 级:
贵宾
威 望:
12
帖 子:4496
专家分:141
注 册:2006-12-28
第
13
楼
收藏
得分:0
当然有区别,必须在类使用前把类体定义全了。。要不然怎么初始化?必须放在外面。。你看看编译原理吧
学习需要安静。。海盗要重新来过。。
2008-06-10 12:58
举报帖子
使用道具
赠送鲜花
sunkaidong
来 自:南京师范大学
等 级:
贵宾
威 望:
12
帖 子:4496
专家分:141
注 册:2006-12-28
第
14
楼
收藏
得分:0
类作为一种数据结构。我是把当成一般数据结构理解的。。放在外面是定义表示全局的数据类型。。。即使是main()函数也是函数,在里它里面定义得类是局部的。。你把类定义为全局,那么必须都是全局的。。静态的初始化也必须是全局的。。你可以看看它报的错误。。
[[it] 本帖最后由 sunkaidong 于 2008-6-10 13:34 编辑 [/it]]
学习需要安静。。海盗要重新来过。。
2008-06-10 13:29
举报帖子
使用道具
赠送鲜花
VanHorn
等 级:
新手上路
帖 子:152
专家分:0
注 册:2008-1-8
第
15
楼
收藏
得分:0
喔?还有这种说法。可是我包含头文件了啊。那我想在main函数里初始化这个静态成员该怎么做呢?
下面的附件是我实验的工作空间。还请楼上的示范一个来看看。
静态继承.rar
(10.36 KB)
我用VC++6我怕谁?
2008-06-10 14:39
举报帖子
使用道具
赠送鲜花
sunkaidong
来 自:南京师范大学
等 级:
贵宾
威 望:
12
帖 子:4496
专家分:141
注 册:2006-12-28
第
16
楼
收藏
得分:0
你只是要表述一个继承的概念和必那么麻烦
#include "stdafx.h"
#include "iostream"
#include "baseClass.h"
#include "Derived.h"
using namespace std;
int CbaseClass ::a=0;
int main(int argc, char* argv[])
{
int b=1;
while (b)
{
CDerived::Fun( );
cout <<"是否继续?退出输入0
"<<CDerived::a<<endl;
cin>>b;
}
return 0;
}
int CDerived::a=0;这个也是可以的我用vs2005只是会警告
学习需要安静。。海盗要重新来过。。
2008-06-10 15:14
举报帖子
使用道具
赠送鲜花
sunkaidong
来 自:南京师范大学
等 级:
贵宾
威 望:
12
帖 子:4496
专家分:141
注 册:2006-12-28
第
17
楼
收藏
得分:0
虽然静态成员在类里面声明但是其实它就只有一个地址空间。。int CbaseClass ::a=0;这个是分配地址空间的。。虽然只有一份,原则上在哪初始化都是一样。。但是要考虑一个问题。。要注意一个问题。。要是在你派生类声明之前,基类如果有实例怎么办?所以会有警告。。在main里面也是同样道理。。如果在你int CbaseClass ::a=0;之前如果有使用怎么办?其实如果编译器做的以后估计也可以支持。。当然会很麻烦。。
[[it] 本帖最后由 sunkaidong 于 2008-6-10 15:34 编辑 [/it]]
学习需要安静。。海盗要重新来过。。
2008-06-10 15:24
举报帖子
使用道具
赠送鲜花
VanHorn
等 级:
新手上路
帖 子:152
专家分:0
注 册:2008-1-8
第
18
楼
收藏
得分:0
我知道你在16楼的做法,这是可以的。但是如果:
int main(int argc, char* argv[])
{
int b=1;
CbaseClass ::a=0;//我在主函数中初始化呢?
while (b)
{
CDerived::Fun( );
cout <<"是否继续?退出输入0
"<<CDerived::a<<endl;
cin>>b;
}
return 0;
}
在主函数中初始化静态变量,书上教的这么弄可以。编译也不报错,但是连接的时候就报错了。
我用VC++6我怕谁?
2008-06-10 19:33
举报帖子
使用道具
赠送鲜花
sunkaidong
来 自:南京师范大学
等 级:
贵宾
威 望:
12
帖 子:4496
专家分:141
注 册:2006-12-28
第
19
楼
收藏
得分:0
可以吗?好像不可以。。作为全局数据类型。我觉得还是放在外面初始化比较好。。放在里面会异常的。。你在考察编译器的健壮性。。就当概念记住吧。。
学习需要安静。。海盗要重新来过。。
2008-06-10 20:08
举报帖子
使用道具
赠送鲜花
VanHorn
等 级:
新手上路
帖 子:152
专家分:0
注 册:2008-1-8
第
20
楼
收藏
得分:0
哈哈,楼上的真幽默,就当是个概念记住吧。
我用VC++6我怕谁?
2008-06-10 20:36
举报帖子
使用道具
赠送鲜花
22
2/3页
1
2
3
快速回复:
static成员能否被继承?
数据加载中...
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.025778 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved