whatis 命令的 -t 选项可显示类型的定义。 对于 C++,whatis -t 显示的列表包括模板定义和类模板实例。
(dbx) whatis -t type-orclassname
要查看继承成员,可以在 whatis 命令中使用 -r 选项(表示“递归”),该选项显示指定类的声明以及它从基类继承的成员。
(dbx) whatis -t -r class-name
whatis -r 查询的输出可能会很长,具体取决于类分层结构以及类的大小。输出以从最原始的类继承的成员列表开头。插入的注释行将成员列表分到其各自的父类中。
要查看类的继承成员的根目录,可以在 whatis 命令中使用 -u 选项,以显示类型定义的根目录。如果不使用 -u 选项,则 whatis 命令将显示值历史记录中的最近值。这与 gdb 中使用的 ptype 命令类似。
以下是两个示例,它们使用类 table,是父类 load_bearing_block 的子类,而该父类又是 block 的子类。
如果不使用 -r,whatis 会报告在类 table 中声明的成员。
(dbx) whatis -t class table
class table : public load_bearing_block {
public:
table::table(char *name, int w, int h, const class point &pos);
virtual char *table::type();
virtual void table::draw(unsigned long pw);
};
以下示例显示了对子类使用 whatis -r 以查看其继承成员的结果。
(dbx) whatis -t -r class table
class table : public load_bearing_block {
public:
/* from base class table::load_bearing_block::block */
block::block();
block::block(char *name, int w, int h, const class point &pos, class load_bearing_block *blk);
virtual char *block::type();
char *block::name();
int block::is_movable();
// deleted several members from example protected:
char *nm;
int movable;
int width;
int height;
class point position;
class load_bearing_block *supported_by;
Panel_item panel_item;
/* from base class table::load_bearing_block */
public:
load_bearing_block::load_bearing_block();
load_bearing_block::load_bearing_block(char *name, int w, int h,
const class point &pos, class load_bearing_block *blk);
virtual int load_bearing_block::is_load_bearing();
virtual class list *load_bearing_block::supported_blocks();
void load_bearing_block::add_supported_block(class block &b);
void load_bearing_block::remove_supported_block(class block &b);
virtual void load_bearing_block::print_supported_blocks();
virtual void load_bearing_block::clear_top();
virtual void load_bearing_block::put_on(class block &object);
class point load_bearing_block::get_space(class block &object);
class point load_bearing_block::find_space(class block &object);
class point load_bearing_block::make_space(class block &object);
protected:
class list *support_for;
/* from class table */
public:
table::table(char *name, int w, int h, const class point &pos);
virtual char *table::type();
virtual void table::draw(unsigned long pw);
};