c++子类调用父类的同名函数

2021-01-20 11:14

阅读:574

标签:构造   如何   cout   构造函数   string   参数   virt   返回   size   

 1 #include  2 #include string>
 3 #include  4 #include  5 #include  6 #include  7 #include  8 
 9 template class c1;
10 template class c2;
11 
12 template 13 class c1 {
14 public:
15     void operator[](size_t i) {
16         std::cout "c1"  std::endl;
17      }
18 };
19 
20 template 21 class c2 : public c1 {
22 public:
23     //类里声明赋值的话,是在构造函数没有赋值时的默认值
24     int        mInt_1 = 1;
25     const int &mInt_2 = 2;
26     const int  mInt_3 = 3;
27 
28 public:
29     //会覆盖掉声明的赋值
30     //如果引用和const在声明和构造函数里都没有赋值的话,肯定会报错的
31     c2(const int _1 = 4, const int _2 = 5, const int _3 = 6) : mInt_1(_1), mInt_2(_2), mInt_3(_3) { }
32 public:
33     void operator[](size_t i) {
34         std::cout  std::endl;
35         std::cout  std::endl;
36         std::cout  std::endl;
37     }
38     //调用的是父类的[]重载函数
39     void printFunc() { (*(c1 *)this)[10]; }
40 };
41 
42 int main(void)  {
43     c2int> tempC2;
44     tempC2.printFunc();
45 
46     std::cout "enter any keyboard to exit."  std::endl;
47     _getch();
48     return 0;
49 }
1 //若用虚函数来修饰[]重载,则无论如何子类也无法调用到父类的函数
2 virtual void operator[](const size_t i) { }
3 
4 //调用的是子类的[]重载
5 *(dynamic_cast *>(this))[10];

 

另外,注意子类父类的虚函数的返回和参数都要一样,dynamic_cast只有在对有虚函数的类强转时才能用

c++子类调用父类的同名函数

标签:构造   如何   cout   构造函数   string   参数   virt   返回   size   

原文地址:https://www.cnblogs.com/AIKaGa/p/12901910.html


评论


亲,登录后才可以留言!