Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++类函数与C类的比较 我现在正在学习C++,我遇到了很多例子,其中的类与我以前在C或java中所用的声明不同。我不清楚以下几点:_C++ - Fatal编程技术网

C++类函数与C类的比较 我现在正在学习C++,我遇到了很多例子,其中的类与我以前在C或java中所用的声明不同。我不清楚以下几点:

C++类函数与C类的比较 我现在正在学习C++,我遇到了很多例子,其中的类与我以前在C或java中所用的声明不同。我不清楚以下几点:,c++,C++,在C中定义一个类时,需要编写完全在类中使用的方法,如下所示: public class example{ public example(){} public void doSomething(){ Console.WriteLine("This is something"); } } 方法doSomething可以通过实例化一个新对象并调用object.doSomething;来访问;。我明白了 为什么人们在C++中做下面的事情? class example{ p

在C中定义一个类时,需要编写完全在类中使用的方法,如下所示:

public class example{
 public example(){}

public void doSomething(){
 Console.WriteLine("This is something");
}

}
方法doSomething可以通过实例化一个新对象并调用object.doSomething;来访问;。我明白了

为什么人们在C++中做下面的事情?
class example{

private: 
 int _thingy;

public:
 void doSomething();

 }

#include <iostream>

example::doSomething(){
 std::cout << _thingy;
}

int main(){
 example x;
 x.doSomething();
 system("pause");
}

如果要在其他方法中重用该类,这不是很糟糕吗?

对于这个问题,您需要学习一些新概念

第一个问题是C++程序是如何建立的。一个C++程序可以包含许多独立的源文件。每个源文件都独立地编译为目标文件。然后,所有目标文件都链接到最终的可执行程序文件中

然后将C++代码分离为源文件和头文件。头文件包含声明和类定义。通常将类定义放在头文件中。函数实现的定义放在一个或多个源文件中

最后,您需要了解源文件和头文件是如何组合在一起的。翻译单元基本上是包含所有头文件的单个源文件。这是实际编译器处理的基本单元


现在是神奇的部分:为了能够调用函数,编译器只需要知道它存在,也就是说,它只需要声明,而不需要定义。由链接器负责获取每个单独的目标文件(编译翻译单元的结果),以解析定义。

这是因为类定义通常放在头文件.h中,而实现是在.cpp文件中定义的@Tom和当重用类方法时,您是否会包括一个包含类内方法实现的cpp文件?因此,当在多个文件集C++中使用类方法时,也可以在类定义内定义实现成员函数。但是拆分函数声明和函数定义有助于解决此问题。@lucster请阅读