Guest User

Untitled

a guest
Jul 23rd, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.77 KB | None | 0 0
  1. #include <string>
  2. #include <cstdio>
  3.  
  4. using namespace std;
  5.  
  6. class TestA{
  7. public:
  8. TestA(){
  9. puts("TestA::TestA()");
  10. }
  11. virtual ~TestA(){
  12. puts("TestA::~TestA()");
  13. }
  14. virtual void dosomething(){
  15. puts("void TestA::dosomething()");
  16. }
  17. };
  18.  
  19. class TestB1: virtual public TestA{
  20. public:
  21. TestB1(){
  22. puts("TestB1::TestB1()");
  23. }
  24. virtual ~TestB1(){
  25. puts("TestB1::~TestB1()");
  26. }
  27. virtual void dosomething(){
  28. puts("void TestB1::dosomething()");
  29. }
  30. void TestB1func(){
  31. puts("void TestB1::TestB1func()");
  32. }
  33. };
  34.  
  35. class TestB2: virtual public TestA{
  36. public:
  37. TestB2(){
  38. puts("TestB2::TestB2()");
  39. }
  40. virtual ~TestB2(){
  41. puts("TestB2::~TestB2()");
  42. }
  43. virtual void dosomething(){
  44. puts("void TestB2::dosomething()");
  45. }
  46. void TestB2func(){
  47. puts("void TestB2::TestB2func()");
  48. }
  49. };
  50.  
  51. class TestC1: public TestB1, public TestB2{
  52. public:
  53. TestC1(){
  54. puts("TestC1::TestC1()");
  55. }
  56. virtual ~TestC1(){
  57. puts("TestC1::~TestC1()");
  58. }
  59. virtual void dosomething(){
  60. puts("void TestC1::dosomething()");
  61. }
  62. void TestC1func(){
  63. puts("void TestC1::TestC1func()");
  64. }
  65. };
  66.  
  67. void calldosomething(TestA &ta){
  68. ta.dosomething();
  69. if(TestB1 *p = dynamic_cast<TestB1*>(&ta)){
  70. p->TestB1func();
  71. }
  72. if(TestB2 *p = dynamic_cast<TestB2*>(&ta)){
  73. p->TestB2func();
  74. }
  75. if(TestC1 *p = dynamic_cast<TestC1*>(&ta)){
  76. p->TestC1func();
  77. }
  78. }
  79.  
  80. int main(int argc, char **argv){
  81. {
  82. TestA ta;
  83. calldosomething(ta);
  84. }
  85. {
  86. TestB1 ta;
  87. calldosomething(ta);
  88. }
  89. {
  90. TestB2 ta;
  91. calldosomething(ta);
  92. }
  93. {
  94. TestC1 ta;
  95. calldosomething(ta);
  96. }
  97. }
Add Comment
Please, Sign In to add comment