带有指针成员的类

时间:2013-04-09 00:30:56

标签: c++ class

class Block 
{
    Block *on;
    char *name;
    bool white;
    bool clear;
    bool onTable;
public:
    Block(char *nm);
    Block(const Block &ob);
    void setName(char *nm);
    char *getName() const ;
    bool isClear();
    void setColor(int colour);
    bool isWhite()const;
    bool isOnTable();
    Block *getOn();
    void putOn(Block &block);
    void putOnTable();
    void takeFromTable();
    void makeClear();
    void flipColor();
    void print();
};

我有这样的课。为什么在像Block *这样的指针上声明*?我们不是必须首先编写int,float或类似的东西吗?什么目的?

类声明中的Block * getOn()函数就是这样;

Block *Block::getOn()
{
    return on;
}

我需要在此代码中返回指针。还有其他办法吗?

2 个答案:

答案 0 :(得分:1)

Block * onon声明为指向Block类型对象的指针。当你编写一个类定义(在这种情况下定义class Block)时,你真的发明了一个全新的数据类型(在本例中为Block),描述了什么类型的数据它包含的内容以及可能的操作。

您的getOn()代码看起来是正确的。

答案 1 :(得分:0)

如果您不想管理原始指针(就像我一样), 更喜欢智能指针。

例如:

     // declare type
    typedef std::shared_ptr<Block> BlockPtr;

    class Block 
    {
        BlockPtr on; // using smart pointer instead of raw pointer
        char *name;
        bool white;
        bool clear;
        bool onTable;
    public:
        Block(char *nm);
        Block(const Block &ob);
        void setName(char *nm);
        char *getName() const ;
        bool isClear();
        void setColor(int colour);
        bool isWhite()const;
        bool isOnTable();
        BlockPtr getOn(); // returning smart pointer
        void putOn(Block &block);
        void putOnTable();
        void takeFromTable();
        void makeClear();
        void flipColor();
        void print();
    };   

    // initializing on
    on = BlockPtr(new Block);