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();
};
然后myMethodOne
从myClass
和myOtherClass
不冲突,因为他们实际上有不同的名字:myClass::myMethodOne
和myOtherClass::myMethodOne
.
myClass myVar;
myVar.myMethodOne();
这知道调用 myClass::myMethodOne
而不是 myOtherClass::myMethodOne
因为 myVar
的 类型 。是myClass
,所以调用了myClass
的方法
虚函数的工作方式不同:它们 存储在每个对象中,尽管通常是间接存储的(通常作为指向整个函数指针的指针),这样每个对象的大小随着我们添加更多虚函数,对象不会增长。
所以我在玩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();
};
然后myMethodOne
从myClass
和myOtherClass
不冲突,因为他们实际上有不同的名字:myClass::myMethodOne
和myOtherClass::myMethodOne
.
myClass myVar;
myVar.myMethodOne();
这知道调用 myClass::myMethodOne
而不是 myOtherClass::myMethodOne
因为 myVar
的 类型 。是myClass
,所以调用了myClass
的方法
虚函数的工作方式不同:它们 存储在每个对象中,尽管通常是间接存储的(通常作为指向整个函数指针的指针),这样每个对象的大小随着我们添加更多虚函数,对象不会增长。