弱弱的问一句 c++中有静态类么?

zyb_debug 2008-09-02 04:33:52
学习c++ 一年 不知道c++中有没有静态类的概念.

如果有,举几个例子上来。

如果没有的静态类的话?我觉得singleton模式就应该可以代替了??????
...全文
917 37 打赏 收藏 转发到动态 举报
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
richbirdandy 2008-09-08
  • 打赏
  • 举报
回复
看到精通多语言的人了。。。
fengyizi 2008-09-08
  • 打赏
  • 举报
回复
具体也遇到过,不是很清楚。期待明白的答案。
pluminsnow 2008-09-08
  • 打赏
  • 举报
回复
mark
sjjf 2008-09-08
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20080903/14/3fae2074-ddcc-4068-b834-f08934a290ef.html?seed=884465164
看了上贴,特地来up晨星。
karl_max 2008-09-03
  • 打赏
  • 举报
回复
java和c#竞然有“静态类”这种东西,设计语言的人是怎么想的?多此一举。
晨星 2008-09-03
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 jieao111 的回复:]
从外覆类上调用,而不必实例化外覆类的对象,,谁能给个例子
[/Quote]
比如在Java中,如果类B是类A的公有静态内部类,即:
public class A {
public static class B {}
}
那么你可以直接:
A.B b = new A.B();

但如果B不是静态的内部类,就不能这么做了,而必需:
A a = new A();
A.B b = a.new B();

当然,C++并没有类似的限制和机制,但C++确实允许为类中的嵌套类加上static修饰符。
wudeshou82666 2008-09-03
  • 打赏
  • 举报
回复
静态类这一说法还真怪怪的.什么鸟概念呢.拿来忽悠人啊
jieao111 2008-09-03
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 steedhorse 的回复:]
引用 10 楼 zyb_debug 的回复:
在c#中 静态类是不需要new就可以用得
c++中 类不实例化用不了

c++中我想要咯可以全局调用不用new的模式
前几天看了个singleton不错

C#和Java中的静态“类”只能是嵌套类。
没有namespace或package级的静态类?
嵌套类的“静态性”只是为了定义它跟外覆类的关系。即是否可以直接从外覆类上调用,而不必实例化外覆类的对象。
[/Quote]

从外覆类上调用,而不必实例化外覆类的对象,,谁能给个例子
jia_xiaoxin 2008-09-03
  • 打赏
  • 举报
回复
类也是一种数据类型,说类是否有静态的,就和问int型是否有静态的没什么区别。
singleton模式是要求一个全局的对象,生成静态的类对象可以满足
晨星 2008-09-03
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 karl_max 的回复:]
java和c#竞然有“静态类”这种东西,设计语言的人是怎么想的?多此一举。
[/Quote]
类的成员类需要指定是否为静态,这倒是可以理解的,而且C++也同样支持。
至于非成员类,三种语言都不支持静态一说。
qinqinhao 2008-09-03
  • 打赏
  • 举报
回复
ding
ding
wind_breez 2008-09-03
  • 打赏
  • 举报
回复
C++ 没有挺过!
baihacker 2008-09-03
  • 打赏
  • 举报
回复
建议不懂的去看程序设计语言原理与实践,那本书讲得比较浅显.
晨星 2008-09-03
  • 打赏
  • 举报
回复
看来C++中确实没有任何形式的“静态类”。

不过,C#和Java中的“静态嵌套类”(static nested class)跟Singleton模式并没有直接的联系。
虽然我们可以利用于嵌套类机制为Singleton模式中的单一实例提供线程安全的懒惰式初始化(可参阅Judith Bishop的《C# 3.0 Design Patterns》),但那都是些细枝末节的实现技巧,况且不一定非得用静态嵌套类,更不见得就只有这一种方法才能做到。

所以,就Singleton模式的实现来说,最关键的技巧还是对类中的静态数据成员静态成员函数的运用,而不是静态类。
晨星 2008-09-03
  • 打赏
  • 举报
回复
Sorry, sorry,非常Sorry。
C++是不允许为嵌套类加上“static”修饰的(事实上任何类名都不允许),只是微软的Visual C++“允许”而已,真汗,偶又上当了。
如果用GNU g++编译器来编译程序,嵌套类加static修饰会报错的。

在这一点上,g++比VC靠谱,因为C++标准(ISO-IEC-14882(2003))说得很明确:
7.1.1.4
The static specifier can be applied only to names of objects and functions and to anonymous unions (9.5). There can be no static function declarations within a block, nor any static function parameters. A static specifier used in the declaration of an object declares the object to have static storage duration (3.7.1). A static specifier can be used in declarations of class members;

9.4.1
A data or function member of a class may be declared static in a class definition, in which case it is a static member of the class.
lc19890326 2008-09-02
  • 打赏
  • 举报
回复
静态与动态都是相对于实例而言的吧
晨星 2008-09-02
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 steedhorse 的回复:]
C#和Java中的静态“类”只能是嵌套类。
没有namespace或package级的静态类?
嵌套类的“静态性”只是为了定义它跟外覆类的关系。即是否可以直接从外覆类上调用,而不必实例化外覆类的对象。
[/Quote]
偶前面写错一处标点。
第二句之后应为句号,而非问号。特此更正。
iambic 2008-09-02
  • 打赏
  • 举报
回复
>>即是否可以直接从外覆类上调用,而不必实例化外覆类的对象。
>我觉得这是c++类型系统的一个缺陷,局部类 只是一个二等公民。不具备外部连接,不能做模板参数等等
你们两个的回复好像没什么联系?
K行天下 2008-09-02
  • 打赏
  • 举报
回复
up 晨星
Jinhao 2008-09-02
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 steedhorse 的回复:]
即是否可以直接从外覆类上调用,而不必实例化外覆类的对象。
[/Quote]

我觉得这是c++类型系统的一个缺陷,局部类 只是一个二等公民。不具备外部连接,不能做模板参数等等
加载更多回复(17)

64,680

社区成员

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

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