为什么在C++ .cpp文件中不包含单词'class'是很常见的?
Why is it common to not include the word 'class' in C++ .cpp files?
大多数类在声明和定义之间是分开的,使用命名空间限定符定义类:
// test.h
class test
{
public:
void func1(void);
private:
void func2(void);
};
// test.cpp
void test::func1(void)
{
//whatever
}
void test::func2(void)
{
//whatever
}
为什么我们通常不看到人们在。cpp文件中使用关键字class ?如以下形式:
// test.cpp
class test {
void func1(void)
{
//whatever
}
void func2(void)
{
//whatever
}
};
使用名称空间限定符只是惯例吗?还是因为当您开始通过多个源文件实现一个类时,它更有意义?
让我们从另一个角度来看这个问题…
可以对两者使用相同的语法,但它是"the other one";以下是完全有效的:
namespace ns
{
int foo();
}
int ns::foo() { return 0; }
看起来像这样,这是一个相反的问题,很有趣,"为什么在。cpp文件中包含'namespace'这个词很常见?"
名称空间和类之间有一个实质性的区别,使得namespace {}
在很多地方都是必需的:名称空间对扩展是开放的,但是类完全由它们的(唯一的)定义来定义。
int ns::bar() { return 9; }
添加上面的函数bar
,向命名空间添加名称的唯一方法是"从内部"。而且,正如许多人发现的那样,将整个文件包装在名称空间中而不使用限定名是很方便的,即使您没有向其添加任何名称。
因此"namespace"的流行:它是命名空间的可扩展性带来的便利。
另一个问题是,"test.cpp"的含义将取决于编译器是否已经看到了类定义-没有它,这是一个具有两个私有函数的类的有效和完整的定义。
这种"远距离操作"依赖于可能非常遥远的代码,处理起来很痛苦。
同样值得注意的是,名称空间是在"带类的C"被创建大约二十年后添加的,当时c++是一种成熟的语言,改变几十年来没有改变的结构的含义几乎是不可想象的。
特别是如果它所做的只是节省一些按键。
相关文章:
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- "Undefined class"作为is_base_of的论据
- 如何将class.cpp和class.hpp编译为一个.o文件
- C++如何在向量中查找最常见的元素
- '{'标记之前的预期类名,然后在预声明时无效使用不完整的类型'class class_name'
- 如何使用"derived input class"创建派生类?
- 错误:"Left of getValue must have class/struct/union"
- Printf 命令不打印时添加了查找常见除数的新代码
- 如何从向量或数组中选择最常见的数字?(前五名)C++
- ' class a : b ' 和 ' class a : public b ' 之间的继承类不同
- Pybind11 Class Definition
- 在C++中使用没有合作伙伴Class/Cpp文件的头文件是否实用
- C2011 'CMemDC':Visual Studio 2019中的'class'类型重新定义
- 打印二叉树中的常见元素
- TypeError: [c++ addon class] 不是构造函数
- C++常见问题 32.8 "pass an object of a C++ class to/from a C function"问题
- 为什么在C++ .cpp文件中不包含单词'class'是很常见的?