【发布时间】:2015-05-20 15:30:59
【问题描述】:
我目前在我的 Foo.h 中定义了两个未命名的类:
class Foo {
public:
Foo();
class {
private:
int x;
int y;
public:
int GetX() { return x; }
int GetY() { return y; }
} Sub1;
class {
private:
int x;
public:
int GetX() { return x; }
} Sub2;
}
这段代码编译得很好,它是这样使用的:
Foo temp;
int Ax, Ay, Bx;
Ax = temp.Sub1.GetX();
Ay = temp.Sub1.GetY();
Bx = temp.Sub2.GetX();
但是,现在我想将成员函数定义移动到源文件中。我知道将此类拆分为头文件和源文件的唯一方法是命名类:
Foo.h:
class Foo {
private:
class A {
private:
int x;
int y;
public:
int GetX();
int GetY();
};
class B {
private:
int x;
public:
int GetX();
};
public:
Foo();
A Sub1;
B Sub2;
}
Foo.cpp:
int Foo::A::GetX() { return x; }
int Foo::A::GetY() { return y; }
int Foo::B::GetX() { return x; }
然而,这段代码不是我想要的,因为它很难看,而且我一开始就不想要一个命名类。
是否可以将类拆分为头文件和源文件?或者这只是糟糕的代码设计?
【问题讨论】:
-
如果 Sub1 和 Sub2 将成为 Foo 的数据成员,请考虑使用结构。然后,您也可以消除对 Get 函数的需求。
-
如果您的内部课程超过
structs,您可以考虑将它们移出课程并进入私人namespace。 -
如果使用未命名的内部类,编译器如何知道使用哪个
GetX函数?你不能通过类名来引用,因为没有。 -
为了演示我的问题,对实际代码进行了简化,内部类不仅仅是 Foo 的数据成员。
-
@AmiTavory 私有命名空间听起来很有趣.. 你有更多相关信息吗?
标签: c++ class definition member-functions