小弟从一本教科书"Inside C++ object model" 里面提到compiler会mangle class的
member name
===================================书本内容==================================
In general, member names are made unique by concatenating the name of the member with that of the
class. For example, given the declaration
class Bar { public: int ival; ... };
ival becomes something like
// a possible member name-mangling
ival__3Bar
Why does the compiler do that? Consider this derivation:
class Foo : public Bar { public: int ival; ... };
Remember that the internal representation of a Foo object is the concatenation of its base and derived class
members:
// Pseudo C++ Code
// internal representation of Foo
class Foo { public:
int ival__3Bar;
int ival__3Foo;
...
};
============================================================================
这样了话Hourlyworker internally tranform to
class Employee{
public:
print_3Employee()
{//do Employee method}
print_3Hourlyworker()
{//do Hourworker method}
};
当 Empoylee *ePtr=(Hourlyworker) &h; compiler则让ePtr access 到
print_3Hourlyworker
不晓得小弟这样理解object model对不对?
※ 编辑: gecer (111.255.9.13), 10/23/2017 22:52:02
※ 编辑: gecer (111.255.9.13), 10/23/2017 23:02:14
※ 编辑: gecer (111.255.9.13), 10/23/2017 23:02:36
※ 编辑: gecer (111.255.25.161), 10/24/2017 21:11:42
※ 编辑: gecer (111.255.25.161), 10/24/2017 21:13:46