c++親ポインタがサブクラスポインタに変換された後にサブクラスのメンバー関数を呼び出す問題

2714 ワード

#include 
using namespacestd ;
class A{
public:
void display(){cout << "A class" << endl ;}
} ;
class B:public A{
public:
void displayB(){cout << "B class" << endl ;}
} ;
int main(){
A a ;
((B*)&a)->displayB() ;
return 0 ;
}
    B class
   ,          ,          B    ,                      ?
int main()
{
int a ; //  int 
((B*)&a)->displayB() ;
return 0 ;
}

.  . B::displayB ,  . class B   x,  displayB x,  .

1, 2, 3, , , , 。 , 。( ) 4, 。 。 , 。 

MFC C++ : 1、 " " " ", 2、 “ ” “ ”, (explicit cast), 。 3、 “ ”, , , , , 1 。

#include #include

using namespace std;

class A { public:   char str[20];   void f(){cout<

class B:public A { public:   int i;   char sb[20];   B(){cout<

int main(int argc, char *argv[]) {   //   A b;   // ,   A *pa=&b;   pa->add();   // , , pa B A .   //pa B , , , pa A ,   // . ,

  B *pb=(B *)pa;   // , . .   // . . B ,   // 。 pb->add(); add pb   // this   pb->add();

  // pa , ,   // , .   pb->i=100;   char dsd[100];   strcpy(pb->sb, " class B's sb.");   strcpy(pb->str, " class A's str.");

  //pb->f() , ,   // . ,   pb->f();   pb->ff();   pb->fff();

  system("PAUSE");   return 0; }