Sup*_*eth 1 c++ polymorphism gdb
考虑如下所示的简单类:
当我们在 gdb 会话中打印 b 或 d 的 ptype 时,它将打印基类(如预期)。
但从逻辑上来说这是不正确的。有没有办法打印对象的实际类型(基于多态行为)?
例如:-
$ ptype b
type = class Base {
public:
virtual void display(void) const;
}
$ ptype d
type = class Derived : public Base {
public:
virtual void display(void) const;
}
Run Code Online (Sandbox Code Playgroud)
您可以使用set print object on,那么您的输出将如下所示:
(gdb) set print object on
(gdb) ptype b
type = /* real type = Base * */
class Base {
public:
virtual void display(void) const;
} *
(gdb) ptype d
type = /* real type = Derived * */
class Base {
public:
virtual void display(void) const;
} *
Run Code Online (Sandbox Code Playgroud)
设置打印后,print object on对象的值将会改变,所以现在你得到:
(gdb) p b
$1 = (Base *) 0x416eb0
(gdb) p d
$2 = (Derived *) 0x416ed0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
534 次 |
| 最近记录: |