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;
}
我需要在此代码中返回指针。还有其他办法吗?
答案 0 :(得分:1)
Block * on
将on
声明为指向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);