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