定义类(和嵌套类)成员函数的更好/更整洁/更易读的方法? [复制]
Posted
技术标签:
【中文标题】定义类(和嵌套类)成员函数的更好/更整洁/更易读的方法? [复制]【英文标题】:A better/neater/more readable way to define class (and nested class) member functions? [duplicate] 【发布时间】:2012-10-04 14:22:35 【问题描述】:可能重复:Is it possible to avoid repeating the class name in the implementation file?
我一直在努力尝试(重新)学习 C++,但我在 C++ 面向对象编程方面遇到了一些理解问题。我最近花了很多时间在 Java 上工作,也许这让我很懒惰,但这是我遇到的问题。
这是我正在使用的不完全完整的代码:
class Pong
public:
Pong();
void run();
private:
//Class to represent a pong ball
class Ball
public:
Ball();
int getVector();
private:
int xvel,yvel;
;
//Class to represent a pong paddle
class Paddle
public:
private:
;
bool init();
//The ball and player paddles
Ball ball;
Paddle p1;
Paddle p2;
;
//Ball members
Pong::Ball::Ball()
//Paddle members
Pong::Paddle::Paddle()
//Pong members
Pong::Pong() : ball(Ball()),p1(Paddle()),p2(Paddle())
ball = Ball();
p1 = Paddle();
p2 = Paddle();
bool Pong::init()
if(!log("Starting pong..."))return 2;
return 0;
void Pong::run()
if(Pong::init() != 0)log("Failed to initialize Pong!");
return;
我在这里遇到的问题实际上是关于可读性的。我想知道是否有一种不那么难看的方式来定义成员和嵌套成员成员,而不必指定诸如 Pong::Ball::Ball() 之类的东西,IE 将命名空间放在每个成员的前面。
我在这里做错了吗?来自所有成员都定义在类本身内部的java,这似乎真的......对我来说很粗糙,也许是在类定义之外定义所有东西(包括嵌套类方法)。它有效,但我不禁觉得有更好的方法可以做到这一点,但我一直在使用的资源 (cprogramming.com) 说这是它需要完成的方式。
(编辑:就在有人抓住我之前,我知道我可以删除 Pong 构造函数中的重复定义。我还没有......)
【问题讨论】:
那些不是命名空间,而是嵌套类。命名空间使用namespace
关键字打开,如果定义在命名空间大括号内,则不需要限定。
也许,但我查看了答案,但它们似乎没有提供相同的信息......我正在寻找的信息。
【参考方案1】:
来自所有成员都定义在类本身内部的 java,这对我来说似乎真的很……粗略,也许是在类定义之外定义所有内容(包括嵌套的类方法)。
这不是问题。 C++ 非常棒,它允许您在类定义的内部和外部定义方法。
如果你想把定义保留在外面,不,没有办法减少资格。
我只是指出以下几点,因为我认为你可能错了:
Pong::Pong() : ball(Ball()),p1(Paddle()),p2(Paddle())
ball = Ball();
p1 = Paddle();
p2 = Paddle();
应该是
Pong::Pong()
即- 无需任何显式初始化。
【讨论】:
好吧,老实说,我一直在按照 cprogramming.com 上的教程中告诉我的内容进行操作。在里面和外面定义它们没有区别吗? 如果所有成员类型都有构造函数,那么两者都是等价的,因此根本不提供构造函数(这涉及到 less 编码)。如果任何成员是 POD 类型,那么它们是不等价的。也就是说,更喜欢显式初始化:Pong::Pong() : ball(), p1(), p2()
(如果任何成员是 POD)或完全避免提供构造函数
@DavidRodríguez-dribeas 是的——在他的例子中——Ball
不是 POD 类型,Paddle
是空的。
罗杰。所以。我可以安全地将所有方法定义放在类 ;本身?如果成员是普通的旧数据类型,究竟有什么区别?我应该确保在相应的初始化列表中指定它?
@Arialth 如果是 POD 成员,默认不会初始化。例如,我编写的Pong
构造函数不会初始化Paddle
(在这种情况下很好,因为它是空的)但会初始化Ball
(因为它不是POD 类型)。是的,如果您愿意,您可以将定义放在类中。以上是关于定义类(和嵌套类)成员函数的更好/更整洁/更易读的方法? [复制]的主要内容,如果未能解决你的问题,请参考以下文章