父类为模板类,子类继承父类调用父类的方法常见错误
相信大家都对继承很清楚,那么如果是父类为模板类,派生出来的子类创建的对象,具体实现要如何调用父类的方法呢?
我们用代码尝试一下
#include<iostream>
#include<string>template<typename T>
class Base {
public:void bar() { std::cout << "111" << std::endl; };
};
template<typename T>
class Derived : public Base<T> {
public:void foo(){this->bar();//bar();//错误写法,访问不到}
};class A {
public:void bar() { std::cout << "111" << std::endl; };
};
class B :public A {
public:void foo(){bar(); }
};int main()
{Derived<int> i;i.foo();i.bar();B v;v.bar();v.foo();return 0;
}
结果是111 111 111 环境为:windows,MSVC,c++20,debug,x86
我们这是正确的写法,大家可以看出来,如果父类为模板,得使用this指针来强调访问。
如果我们不使用this,那么看看报错结果
先看一下书上对此类似的描述
我们详细说一下:
对于在模板的定义中所使用的非待决名,当检查该模板的定义时将进行无限定的名字查找。
在这个位置与声明之间的绑定并不会受到在实例化点可见的声明的影响。而对于在模板定义中所使用的待决名,它的查找会推迟到得知它的模板实参之时。
写下bar()的时候,它被判定位非待决名,于是在检查该模板定义的时候,也就是没实例化的时候就查找名字,没找到的话就报错未定义了。
如果写上this->bar构成待决名,它的查找推迟到知道模板实参,也就是实例化的时候。
如果不清楚什么是待决https://zh.cppreference.com/w/cpp/language/dependent_name可以看看文档对此的描述.
名字查找看:无限定的名字查找 - cppreference.com
父类为模板类,子类继承父类调用父类的方法常见错误相关推荐
- 在C++中子类继承和调用父类的构造函数方法
构造方法用来初始化类的对象,与父类的其它成员不同,它不能被子类继承(子类可以继承父类所有的成员变量和成员方法,但不继承父类的构造方法).因此,在创建子类对象时,为了初始化从父类继承来的数据成员,系统需 ...
- 为什么通常在类的init函数下一行写super().__init__()?==>就是执行父类的构造函数,使得我们能够调用父类的属性
我们通常看到 那么这一行代码的意义是什么呢? 实例: class Root(object):def __init__(self):self.x = '这是属性'def fun(self):print( ...
- Python 子类继承多个父类属性
Python 子类继承多个父类属性 可能存在的误区 正确继承方法 可能存在的误区 python允许子类同时继承多个父类.但是在子类初始化父类时,单继承和多继承稍有不同.使用单继承的初始化方法会导致父类 ...
- C++模板元编程(8)模板类的继承
模板类的继承包括四种: 1.普通类继承模板类 大家要区分模板类和类模板的概念,模板类是类模板具体化后得到的类. template<class T> class Base {public:B ...
- java 子类 复制_关于java子类继承来的属性与方法究竟是完全复制还是共用使用...
关于java子类继承来的属性与方法究竟是完全复制还是共用使用 关于java子类继承来的属性与方法究竟是完全复制还是共用使用 今天在学习java的面向对象时,无意间发现一个问题. public clas ...
- python 钻石继承_python3--object类,继承与派生,super方法,钻石继承问题
python3--object类,继承与派生,super方法,钻石继承问题 发布时间:2018-04-13 20:38:05编辑:Run阅读(1914) 昨天内容复习 组合:什么有什么的关系(例:老师 ...
- C++中了类继承和调用父类的构造函数方法
构造方法用来初始化类的对象,与父类的其它成员不同,它不能被子类继承(子类可以继承父类所有的成员变量和成员方法,但不继承父类的构造方法).因此,在创建子类对象时,为了初始化从父类继承来的数据成员,系统需 ...
- python 类继承 父类初始化_python之子类继承父类时进行初始化的一些问题
直接看代码: classPerson:def __init__(self): self.name= "jack" classStudent(Person):def __init__ ...
- 【面向对象编程】(4) 类的继承,重构父类中的方法
各位同学好,今天和大家分享一下面向对象编程中,类的三大特征之继承.主要介绍:子类继承父类的基本方法:重写父类的类方法:重构父类的初始化方法:super() 方法.本节主要是单继承,多继承在下一节中介绍 ...
最新文章
- 【基础篇】DatePickerDialog日期控件的基本使用(一)
- 量化网络训练--Towards Effective Low-bitwidth Convolutional Neural Networks
- java amr 转 mp3_JAVA 音频转换AMR 转MP3,OS,Linux cent os 7
- 14.3.1 调用系统的拍照功能
- vr rgb yuv学习资料整理
- Linux内核省电社区,Linux 内核社区补丁对比
- SAP Spartacus split view控制同屏显示最大视图数的配置
- c#url拼接方法名_C# 从1到Core委托与事件
- 使用jquery简化ajax开发
- 学习指南_这可能是全网最详细的HTTP学习指南了
- java实现文件的复制
- 高斯列主元消去法matlab,高斯列主元消去法解线性方程组的实现
- youtube-dl 安装和用法
- 如何用计算机看苹果手机的文件,如何在电脑上管理iphone文件?
- linux编译lame,linux 下安装lame以及tritonus-mp3enc
- 进程调度案例分析:为何不能调度?
- 数据库事务ACID四大特性:原子性、一致性, 隔离性, 持久性
- 技术人该如何选择未来职业方向?一起听听这几位美团同学的故事
- 【转载】PCB设计方法和技巧
- 145页6万字政务大数据交换共享平台建设方案
热门文章
- Android 7.0系统使用Intent跳转到APK安装界面
- CAD看图软件怎么打开dwg格式的图纸文件?
- 项目经理如何培养自己的人际交往能力
- android智能手机排行,智能手机性价比排行2015前十名-2015全球安卓智能手机性能排名...
- NOI/1.9.8 白细胞计数(用list求解)
- 开关稳压器详解(五)-Buck降压型开关稳压器PCB layout布局
- 过年回家,和女朋友一起玩的android游戏,单身20年的手速居然输了!
- 双目立体视觉之深度估计
- cad拉伸怎么用_cad缩放怎么用?cad怎么按比例缩放图形?
- 平安京服务器维护无法发布新内容,决战平安京10月25日更新维护公告 决战平安京更新内容汇总...