码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2020-05-16 20:37:33      阅读:67      评论:0      收藏:0      [点我收藏+]

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

 1 #include <iostream>
 2 #include <string>
 3 #include <cstring>
 4 #include <memory>
 5 #include <map>
 6 #include <hash_map>
 7 #include <conio.h>
 8 
 9 template <typename T> class c1;
10 template <typename T> class c2;
11 
12 template <typename T>
13 class c1 {
14 public:
15     void operator[](size_t i) {
16         std::cout << "c1" << std::endl;
17      }
18 };
19 
20 template <typename T>
21 class c2 : public c1<T> {
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 << mInt_1 << std::endl;
35         std::cout << mInt_2 << std::endl;
36         std::cout << mInt_3 << std::endl;
37     }
38     //调用的是父类的[]重载函数
39     void printFunc() { (*(c1<T> *)this)[10]; }
40 };
41 
42 int main(void)  {
43     c2<int> 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<c1<T> *>(this))[10];

 

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

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

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

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!