关于c++静态类的说法

看了网上的观点,大致有这几种比较好的。

观点一:根据现代的C++观点,静态类没有必要存在于C++中。

一个类是对一个概念的描述,类的本质是它维护了一个不变式,也就是说它有一个状态,它所有的接口都是为了访问或者获取这个状态以及跟状态相关的操作。一个静态类没有状态,因此就没有必要成为一个类。在C++中静态方法不如非静态非类的成员方法好,尤其是使用了模板的情况下。

我的疑问:如果只声明类起显示作用呢?

观点二:C++里不可能有静态类的说法,相反,在Java里倒是有这么一说。
C++由于具有传值、传址、哑元功能,使用静态类不仅多余而且也完全没有必要,相反,对Java、C#之类“改进型语言”来说,由于为避免指针,防止过多的产生对象实例,就必须额外的引入一些新的“先进性”的东西,比如静态类。然而,静态类本身是一个半成品(或是终极产品),由于其无法继承,静态类的产品化会因为不便升级而成为一种垃圾。
同样,即便是在Java里,静态类的作用也仅相当于包含静态实例的C++类型定义,然而从语义上还没有C++定义的直观,为了对付一个小小的指针,避免伪引用,有必要做这么大的动作吗?我对此感到不值。

 

观点三:C#或Java的
类可以声明为 static 的,以指示它仅包含静态成员。不能使用 new 关键字创建静态类的实例。静态类在加载包含该类的程序或命名空间时由 .NET Framework 公共语言运行库 (CLR;特指:C#语言) 自动加载。 
静态类只用于包含静态成员的类型,它既不能实例化,静态类的特性是防止继承,防止外部来NEW。
所以C++中不存在静态类
观点四:使用静态类来包含不与特定对象关联的方法。
例如,创建一组不操作实例数据并且不与代码中的特定对象关联方法是很常见的要求。您应该使用静态类来包含那些方法。
静态类的主要功能如下:
    它们仅包含静态成员。(仅包含静态成员不是上面说的包含不操作实例数据,不与对象关联矛盾吗?)
    它们不能被实例化。
    它们是密封的。
    它们不能包含实例构造函数(C# 编程指南)。
    静态类不能使用abstract或sealed修饰符。
    静态类默认继承自System.Object根类,不能显式指定任何其他基类。
    静态类不能指定任何接口实现(不能有接口实现,那起什么作用)。
    静态类的成员不能有protected或protected internal访问保护修饰符。

观点五:

 

静态类和静态类成员(C# 编程指南)

静态类和类成员用于创建无需创建类的实例就能够访问的数据和函数。静态类成员可用于分离独立于任何对象标识的数据和行为:无论对象发生什么更改,这些数据和函数都不会随之变化。当类中没有依赖对象标识的数据或行为时,就可以使用静态类。

结论:

当一个类完全脱离实例数据和对象时可以使用静态类。

静态类可以有自己的成员变量和成员函数,但都必须是静态的。对静态成员变量只能是程序运行开始时初始化,不能在类内初始化。

静态类没有基类。



版权声明:本文为博主原创文章,未经博主允许不得转载。

 

转载于:https://www.cnblogs.com/x739400043/p/4732196.html

C++ 中的构造函数可以根据其功能和特性分为多种类型。以下是常见的几种分类及解释: ### 1. 默认构造函数 (Default Constructor) 默认构造函数是指不带任何参数的构造函数,或者是带有全部都有默认值参数的构造函数。它用于创建对象时不提供初始化数据的情况。 **示例:** ```cpp class MyClass { public: MyClass() { /* 初始化内容 */ } }; ``` --- ### 2. 带参构造函数 (Parameterized Constructor) 这种构造函数接收一个或多个参数,并通过这些参数对类成员变量进行初始化。 **示例:** ```cpp class MyClass { public: int value; MyClass(int val) : value(val) {} // 使用初始化列表 }; ``` --- ### 3. 拷贝构造函数 (Copy Constructor) 当需要通过已有的对象来创建新对象时会调用拷贝构造函数。它的作用是对原对象的内容进行复制(浅拷贝还是深拷贝取决于实现细节)。 **语法形式:** ```cpp ClassName(const ClassName& obj); ``` **示例:** ```cpp class MyClass { public: MyClass(const MyClass &other) { /* 复制 other 的属性到当前对象*/ } }; ``` --- ### 4. 移动构造函数 (Move Constructor - C++11及以上支持) 移动构造函数是用来将资源从临时对象转移到新对象的一种优化机制。相比传统的拷贝操作更高效,因为它避免了不必要的内存分配等开销。 **语法形式:** ```cpp ClassName(ClassName&& obj); ``` **示例:** ```cpp #include <utility> class MyClass { public: std::vector<int> data; // Move constructor MyClass(MyClass &&tempObj):data(std::move(tempObj.data)) {} }; ``` --- ### 5. 静态构造函数 (Static Constructors) 需要注意的是,在标准 C++ 中并没有“静态构造函数”的说法,因为构造函数本质上是非静态的、属于某个实例的操作。不过可以借助一些特殊手段如全局函数配合 `static` 成员完成类似的效果。 --- 以上就是关于 C++ 构造函数的一些基本分类及其特点介绍!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值