我有一点C++的背景,但我只是刚刚开始接触这种语言的面向对象编程方面。我正在阅读有关类格式的C++教程网站。我读到可以在类内声明一个函数,然后使用作用域操作符::在类外定义它。考虑到我的一点经验,我想知道是否普遍倾向于在类内定义函数,或者如果它在类外定义,或者如果它真的无关紧要。
来自C++教程网站
// classes example
#include <iostream>
using namespace std;
class Rectangle {
int width, height;
public:
void set_values (int,int);
int area() {return width*height;}
};
void Rectangle::set_values (int x, int y) {
width = x;
height = y;
}
这意味着,在类中只包含set_values定义不是更紧凑、更高效吗?
一如既往的,谢谢。
发布于 2015-06-26 20:44:41
通常,声明位于.h
文件中,而定义位于同名的.cpp
文件中。
示例:
矩形.h:
class Rectangle {
int width, height;
public:
void set_values (int,int);
int area() {return width*height;}
};
rectangle.cpp:
#include <rectangle.h>
void Rectangle::set_values (int x, int y) {
width = x;
height = y;
}
这在将你的代码分发给其他人的时候很有帮助。您可以只分发一个.dll
和一个.h
供其他人使用,并将实际代码保存在.cpp
文件中。
当.h
文件开始增长时,它也很有用。看到上千行的.cpp
文件并不少见。仅仅是为了找到该类的公共接口,就需要花费大量的精力。
注意:.h
和.cpp
只是约定。您可能会发现其他函数,如.cxx
和.inl
(用于内联函数)。
发布于 2015-06-26 20:42:59
短方法在声明中很好用。较长的方法通常更适合与cpp文件中的其他方法一起保存。Getter和setter通常很短,所以在学习或调试其他更重要的方法时,某些人(不是原始作者)不需要太关心它们。
发布于 2015-06-26 20:45:17
这取决于您遵循的约定。
常见的约定是将getter和setter放在头文件中,因为这些函数可能经常被调用,因此应该由编译器内联。将函数放在头文件中鼓励(但不保证)编译器执行此操作。
接下来,出于各种原因,更长的声明应该保留在.cpp中。首先也是最重要的,如果您在.h中做了任何更改,它必须重新编译任何文件,包括头文件。这可能会显著增加时间,具体取决于您的项目。其次,这提供了一种方法来“隐藏”您想要构建到库中的专有代码。在这种情况下,以及在最常见的良好编程实践中,您希望头文件成为程序员的指南,程序员可以在这里快速了解类的功能,并根据注释来决定如何使用类提供的功能。
https://stackoverflow.com/questions/31081698
复制