有没有办法避免Graph::
实现文件中的重复,但仍然将类拆分为头+实现?如:
头文件:
#ifndef Graph_H
#define Graph_H
class Graph {
public:
Graph(int n);
void printGraph();
void addEdge();
void removeEdge();
};
#endif
Run Code Online (Sandbox Code Playgroud)
实施档案:
Graph::Graph(int n){}
void Graph::printGraph(){}
void Graph::addEdge(){}
void Graph::removeEdge(){}
Run Code Online (Sandbox Code Playgroud)
Vik*_*pov 12
如果你想避免在printGraph,addEdge等前面输入"Graph ::",那么答案是"不",不幸的是.类似于C#的"部分类"功能在C++中是不可访问的,任何类的名称(如"Graph")都不是命名空间,它是一个范围.
小智 10
我猜这是为了避免大量的"不必要的打字".可悲的是,没有办法摆脱范围(正如许多其他答案告诉你的那样)然而我个人所做的是用我所有的函数原型定义好的行,然后复制/粘贴到实现文件然后ctrl-c您在剪切板上的ClassName ::并使用ctrl-v运行该行.
不,没有.至少不是直接的.您可以选择预处理器技巧,但不要这样做.
#define IMPL Graph::
IMPL Graph(int n){}
void IMPL printGraph(){}
void IMPL addEdge(){}
void IMPL removeEdge(){}
Run Code Online (Sandbox Code Playgroud)
此外,你应该甚至不希望这样做.重点是什么.除了它是一个C++规则,它还会让你知道你实际上正在实现一个成员函数.
一种选择是using
。如果您的方法定义位于从未获得#include
d 的 cpp 文件中,那么using
是安全的(不会影响其他文件):
foo.h:
class FooLongNameSpecialisationsParamaters
{
int x_;
public:
int Get () const;
void Set (int);
};
Run Code Online (Sandbox Code Playgroud)
foo.cpp:
#include "foo.h"
using Foo = FooLongNameSpecialisationsParamaters;
int Foo::Get () const
{
return x_;
}
void Foo::Set (int x)
{
x_ = x;
}
Run Code Online (Sandbox Code Playgroud)
主要.cpp:
#include "foo.h"
int main ()
{
//Foo foo; <-- error
FooLongNameSpecialisationsParamaters foo;
return 0;
}
Run Code Online (Sandbox Code Playgroud)