定义类(和嵌套类)成员函数的更好/更整洁/更易读的方法? [复制]

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 类型)。是的,如果您愿意,您可以将定义放在类中。

以上是关于定义类(和嵌套类)成员函数的更好/更整洁/更易读的方法? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何将 INSERT sql 语句变成更易读的形式?

markdown 尽可能使用更短且更易读的语法

将以秒为单位的时间间隔转换为更易读的形式

以更易读的格式显示双精度科学记数法

有没有办法用 CSS 将长数字(“$100000000”)分解成更易读的三元组(“$100 000 000”)?

markdown 这些说明包括1月13日(上午8:30 +上午11:41)发布的更新,更易读的格式。