If I declare a class and extend it, the object created from the extended class
shouldn't always refer to the extended class methods and typeid even if casted
to the first class?
See the code:
#include <iostream>
#include <typeinfo>
class A
{
public:
int a;
A() { ; }
~A() { ; }
void foo() { std::cout << "A: foo! " << this->a << std::endl; a
+= 1000; }
};
class B : public A
{
public:
void foo() { std::cout << "B: foo! " << this->a << std::endl; }
};
int
main( int argc, char * argv[] )
{
B * b = new B();
A * a = NULL;
b->a = 10;
b->foo();
a = (A *) b;
a->foo();
std::cout << typeid( a ).name() << std::endl;
std::cout << typeid( b ).name() << std::endl;
b->foo();
a = NULL;
delete b;
return 0;
}
Actual result:
B: foo! 10
A: foo! 10
P1A
P1B
B: foo! 1010
Expected result:
B: foo! 10
B: foo! 10
P1B
P1B
B: foo! 10
--
Summary: C++ method resolution error
Product: gcc
Version: 4.3.3
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: sergio at gruposinternet dot com dot br
GCC build triplet: ?
GCC host triplet: GNU/Linux
GCC target triplet: i386
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41721