在c#和c++中在多个CPP文件中定义函数是相同的
Is partial class in C# and in C++ defining functions in multilple CPP files are same?
在c++中,我们可以在。h文件中声明一个类,并且可以在多个文件中拥有函数的定义。这个概念是否与c#中的类使用部分关键字相同?
是和否。
使用partial的主要原因是,不同的各方(您和1+工具/设计师)可以各自使用类的各自部分。在c++中,这需要在多个.h
文件中拆分实际的类定义,这是不可能的。
但是最后所有的代码都被编译器(链接器)合并到一个类定义中,这个定义必须与所有的规则一致。
不,不是。c#中的partial关键字允许你向类中添加新的方法和成员。在c++中,一旦在头文件中定义了类,就需要修改头文件才能修改类,不能在另一个头文件中声明新的方法/成员。
c#:class A{
public void f(){}
}
//other file:
partial class A{
public void g(){}
}
现在A类有函数f和g。然而,在c++中,一旦定义了:
class A{
public:
void f();
}
f将成为a中唯一的方法。您不能在新的头文件中声明新方法,也不能在cpp文件中定义没有在类定义中的方法。
显然,c#中的partial关键字应该只用于将Visual Studio(用户界面组件)自动生成的数据与代码分开。如果您想用它来拆分您的大类,那么很可能您应该考虑将它拆分为几个较小的类。
有一个在其他答案中没有提到的不一样的原因:CLR作为JVM,与类一起工作,因此类的概念保留在编译的代码中。标准c++通常编译成没有类概念的对象格式。由于这个原因,c++编译器必须更改函数名,以确保它们对于将生成的库或可执行文件组合在一起的链接器是唯一的。这个过程被称为"mangling"。
相关文章:
- 不同翻译单元中不可重载的非内联函数定义
- Visual Studio中的函数声明和函数定义问题
- 编写代码时C++出现错误:错误 1 错误 C2601:'circle':本地函数定义是非法的
- 具有enable_if外部类原型的模板类构造函数定义
- 类的前向声明之后的类成员函数定义,在类声明之前
- 为函数定义符号不明确的指针参数
- C++模板专用化 - 无法匹配函数定义
- 错误:在第 6 行'{'标记之前,此处不允许使用函数定义
- 找不到 #define 的函数定义
- 根据类型特征更改函数定义?
- 将抽象基类中的所有纯虚函数定义为 varaidaic 模板
- 命名空间更改函数定义
- "Type&"与C++函数定义中的"Type*"
- C++:为什么允许在另一个函数中声明函数,而不允许在函数定义中声明?
- 如何从 C++ 中的现有模板函数定义新函数
- 私有在函数定义/实现的返回值范围内是什么意思 (c++)?
- 越界成员函数定义是否需要一个完全限定的类名,直到全局范围
- 为什么c++允许成员函数定义中实例的私有成员访问
- Qt基类函数定义
- C++函数定义中参数列表后面额外一对括号的含义