如下:
#include
<
iostream
>
using namespace std;
class Grandfather ... {
public:
virtual void display()=0;
void run()...{
cout<<"Grandfather Run!!! ";
}
} ;
class Father: public Grandfather ... {
public:
int fatherValue;
void display()...{
cout<<"Father Display!! ";
}
void run()...{
cout<<"Father Run!!! ";
}
} ;
class Uncle: public Grandfather ... {
public:
int uncleValue;
void display()...{
cout<<"Uncle Display!! ";
}
void run()...{
cout<<"Uncle Run!!! ";
}
} ;
class Son: public Father ... {
public:
int sonValue;
void display()...{
cout<<"Son Display!! ";
}
} ;
void main() ... {
Grandfather* grandfather_pt=NULL;
Father* father_pt=NULL;
Son* son_pt=NULL;
Father father;
Uncle uncle;
Son son;
cout<<"静态绑定 不用virtual关键字: ";
grandfather_pt=&uncle;
grandfather_pt->run();
grandfather_pt=&father;
grandfather_pt->run();
cout<<" 动态绑定 纯虚函数: ";
grandfather_pt=&uncle;
grandfather_pt->display();
grandfather_pt=&father;
grandfather_pt->display();
cout<<" 指针强制转换 ";
( (Father*)(&son) )->display();
// ( (Father*)(&son) )->run();
cout<<" 对象强制转换 ";
((Father)son).display(); //只允许upcasting,不允许downcasting
cout<<" 编译器为了防止对象切割的发生,自动调用拷贝构造函数,因此,比较地址: ";
cout<<( father_pt=&((Father)son) )<<endl; //注意优先级
cout<<&son<<endl;
cout<<"发现二者不同! ";
}
using namespace std;
class Grandfather ... {
public:
virtual void display()=0;
void run()...{
cout<<"Grandfather Run!!! ";
}
} ;
class Father: public Grandfather ... {
public:
int fatherValue;
void display()...{
cout<<"Father Display!! ";
}
void run()...{
cout<<"Father Run!!! ";
}
} ;
class Uncle: public Grandfather ... {
public:
int uncleValue;
void display()...{
cout<<"Uncle Display!! ";
}
void run()...{
cout<<"Uncle Run!!! ";
}
} ;
class Son: public Father ... {
public:
int sonValue;
void display()...{
cout<<"Son Display!! ";
}
} ;
void main() ... {
Grandfather* grandfather_pt=NULL;
Father* father_pt=NULL;
Son* son_pt=NULL;
Father father;
Uncle uncle;
Son son;
cout<<"静态绑定 不用virtual关键字: ";
grandfather_pt=&uncle;
grandfather_pt->run();
grandfather_pt=&father;
grandfather_pt->run();
cout<<" 动态绑定 纯虚函数: ";
grandfather_pt=&uncle;
grandfather_pt->display();
grandfather_pt=&father;
grandfather_pt->display();
cout<<" 指针强制转换 ";
( (Father*)(&son) )->display();
// ( (Father*)(&son) )->run();
cout<<" 对象强制转换 ";
((Father)son).display(); //只允许upcasting,不允许downcasting
cout<<" 编译器为了防止对象切割的发生,自动调用拷贝构造函数,因此,比较地址: ";
cout<<( father_pt=&((Father)son) )<<endl; //注意优先级
cout<<&son<<endl;
cout<<"发现二者不同! ";
}