在有人问之前,是的,这是家庭作业的一部分,是的,我在问之前做了很多谷歌搜索。我花了最后一小时在谷歌上搜索了许多不同的关键词,但却找不到任何东西。
所以这就是问题所在:
以下变量定义的含义是什么:
class MyClass* myClass;
?
我尝试使用class MyClass* myClass = new MyClass();
之类的代码,发现它只是创建了一个指向MyClass
新实例的指针。
那么,使用class
前缀的优势是什么?这有什么不同吗?
有人有关于它的某些资源的链接吗?我根本找不到任何东西(真的很难找到除了#34;类定义"以外的东西。)。
非常感谢!
答案 0 :(得分:15)
详细的类型说明符是一个类型名称,前面是class,struct,enum或union关键字。
class identifier
struct identifier
enum identifier
union identifier
精心设计的类型说明符用于强调,或显示由同一范围内具有相同名称的变量声明隐藏的类型名称。
答案 1 :(得分:9)
实际上,在创建类的对象时使用class
是可选的。在C语言中,必须在struct name前面使用struct
来创建其变量。因为C ++是C的超集.C ++中struct和class之间只有一个区别,那就是访问修饰符。
为了保持向后兼容,这是允许的。
所以,
class MyClass* myClass = new MyClass();
和
MyClass* myClass = new MyClass();
两者都是一样的。
答案 2 :(得分:3)
这里需要提及“内联前瞻声明”这个词!
前向声明只是一种在实际定义之前告诉编译器类型名称的方法。你总是在头文件中找到它们。
// MyStruct.h
class MyClass;
struct MyStuct {
MyClass* m_myClass;
void foo();
}
// MyStruct.cpp
#inlude "MyClass.h"
void MyStruct::foo() { m_myClass->SomeFunc(); }
请注意,头文件只将MyClass声明为类标识符,并且在通过cpp文件中的#include定义它之前不知道它实际是什么。这是前瞻性声明。
内联前向声明实际上是相同的,但你只需在一行上完成所有操作。这是完全相同的完全相同的代码。
// MyStruct.h
struct MyStuct {
class MyClass* m_myClass;
void foo();
}
// MyStruct.cpp
#inlude "MyClass.h"
void MyStruct::foo() { m_myClass->SomeFunc(); }
我觉得大多数程序员更喜欢标准的前向声明方法(通常更少打字)。这就是为什么当绊倒较少使用的内联版本时它会让人感到困惑。
我在这里看到很多答案,称之为可选关键字,但在上面的内联前向声明上下文中,它非常不可选,并且由于缺少类型说明符而导致编译错误。