C++ OOP 是如何工作的?

How does C++ OOP works?

所以我在玩C++的特性,我发现C风格的函数指针和C++的方法有很大的不同。这是我的意思:

typedef struct _myStruct {
    void (*myFunctionOne)();
    void(*myFunctionTwo)();
    void(*myFunctionThree)();
} myStruct;

大小为 3 * 4 = 12 个字节。

typedef struct _emptyStruct {
} emptyStruct;

大小为 1 个字节。

class myClass {
     void myMethodOne();
     void myMethodTwo();
     void myMethodThree();
};

大小为 1 个字节,就像这是一个空结构。

为什么是空的?如果 C++ 方法不是函数指针,它们是如何实现的?如果它没有任何指针,class "know" 如何处理它的方法?这个问题其实并没有太打扰我,但是却引起了我的好奇。

在函数指针结构中,每个指针都是一个成员变量。 C++ class 没有任何成员变量,正如你所说,它是 empty.

成员函数与成员变量不同。

成员函数是函数。它们被实现为函数。它们不是数据,不存储在结构中。它们只是在那里 声明

如果你有

class myClass {
     void myMethodOne();
     void myMethodTwo();
     void myMethodThree();
};

然后是另一个class

class myOtherClass {
     void myMethodOne();
     void myMethodFortyTwo();
};

然后myMethodOnemyClassmyOtherClass不冲突,因为他们实际上有不同的名字:myClass::myMethodOnemyOtherClass::myMethodOne.

myClass myVar;
myVar.myMethodOne();

这知道调用 myClass::myMethodOne 而不是 myOtherClass::myMethodOne 因为 myVar 类型 。是myClass,所以调用了myClass的方法

虚函数的工作方式不同:它们 存储在每个对象中,尽管通常是间接存储的(通常作为指向整个函数指针的指针),这样每个对象的大小随着我们添加更多虚函数,对象不会增长。