c++类的函数是否对所有对象只有一个副本?
Does functions of a C++ class have only one copy for all objects?
c++中的普通函数(而不是静态函数)是否对一个类只有一个副本,这意味着所有对象都引用同一个副本?如果是这样,正常函数和静态函数的区别是什么?此外,我的老师说我们不能使用"(object_name).(func_name)"符号调用类的静态函数,但必须使用"class_name::(func_name)"来调用它,虽然我明白这是合乎逻辑的事情,但就语言而言,我不允许使用(object_name).(func_name)符号调用静态函数吗?最后,是否可以在类的构造函数或该类的任何其他函数中初始化类的静态数据成员,而必须从类外部初始化?
如果只有一个副本,您的意思是所有函数在内存中具有相同的位置,那么是的,您是对的。不同之处在于,静态函数不需要实例化对象才能调用。这也意味着不能访问类的其他非静态成员。
至于初始化,不能在构造函数中进行,因为调用访问静态成员的静态函数需要事先调用构造函数。这是无法保证的。可以在构造函数内部修改静态,但必须在其他地方初始化。
考虑这个场景:
class A
{
static int x;
public:
A()
{
x = 3;
}
static int getX()
{
return x;
}
}
int main()
{
A::getX(); //what would x be here? It hasn't been initialized since A() was not called.
}
至于用(object).(function)而不是(class)::(function)调用函数,我相信你可以这样做,但你为什么要这样做呢?
相关文章:
- 我有一个对象,它将在整个程序的持续时间内实例化,但一个类成员不会,我应该动态分配它吗?
- 在 C++ 中声明 const 对象需要用户定义的默认构造函数.如果我有一个可变成员变量,为什么不呢?
- 有没有办法在同名类 (c++) 中为对象分配一个指针变量
- 我们可以有一个 setter 成员函数作为从 const 对象引用的 const 吗?
- C++是否有一个容器,每个类型最多存储一个对象
- Qt:在一个类中有一个QPainter对象的实例
- 如何让线程等待对象完全破坏?(对象也有一个线程)?
- 让一个名为A的类.传递以下两个对象有什么区别:(a)obj1和(b)obj1()
- 我有一个 Qt 对象的 2d 数组,我已经用值播种了这些对象。如何访问数组中特定对象的值并更改它们?
- 我在代码中有一个错误,错误是:(智能感知:不允许抽象类类型"HourlyWorker"的对象:)
- 类有一个自类型的对象
- 是否有一个函数可以显示我创建的类中的对象到 QTextBrowser 中?
- 在堆栈上有一个对象,而不是在函数的整个生命周期内
- 得到错误"left of '.toString' must have class/struct/union",即使 toString 应该有一个合适的对象
- 我有不同的类,我想用这些类中的对象制作一个向量,然后按值对其进行排序
- 你如何断言一个对象在c++中有一个特定的方法
- 有可能在同一个字符序列上有一个类似函数的宏和一个类似对象的宏吗
- C++如果我有一个对象指针,是在堆栈或堆上分配的方法变量
- 有没有一种方法可以为类的每个对象提供一个boost线程
- JsonCpp - 当有一个 json::Value 对象时,我怎么知道它的键名?