• 全部
  • 问答

在基类中定义一个可以在继承类中重新定义其值的常量的标准方法是什么?

yiyuan 2006-08-20 06:40:31
呵呵,话有点绕。

我在基类中有一个函数,这个函数使用一个常量(比如超时的时间)。其各个继承类中要把这个常量设置为不同的值(比如有的类是5秒超时,有的类是10秒超时),基类的函数不需要改变。请问完成这一功能的标准方法是什么?

我现在的方法是在基类中设置const常量,派生类设置static const常量,在构造函数中将static const常量赋值给基类的const常量。不知道这样是不是标准方法?这样做当然是可以,但当设置的常量数量较多时,需要写的代码也较多,不知道有没有更方便容易的方法完成这个功能?

比如在派生类中定义和基类相同名字的static const常量但值不同可以实现这个功能吗?或者还有什么其它方便的方法?
...全文
261 点赞 收藏 12
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
晨星 2006-08-20
我觉得如果有一个量,在同一族或同一类的对象之间访问它时可能返回不同的值,那么直接用公开成员变量的方法来提供它本来就很不OO。:P
回复
yiyuan 2006-08-20
zenny_chen(ACE Intercessor)所说的方面就是我上面所说的方法。我主要是觉得在派生类中会有两个常量表示同一个值和意思,看着很别扭。

lass Child : public Base
{
public:
static const long MY_TIME_OUT = 5; // 单独写出来以后方便修改

Child(unsigned long tmo) : Base(MY_TIME_OUT)
{
// Add your code here.
}
};

于是在派生类中,就会有MY_TIME_OUT和基类的time_out表示同一个值,有点不爽。。。虽然只是看起来。。。如果按steedhorse(晨星) 的方法,倒是就可以解决这个问题。

基类指针应该不是问题吧,当生成类时,基类的值被派生类初始化,所以后面即使使用基类的指针,值也应该是派生类的那个值吧。

我本来的打算就是因为值是常量,所以就不用虚函数多花时间了。但看上去似乎不大完美。。。可能还是用虚函数的方法比较好。
回复
晨星 2006-08-20
哦,或许我想多了。

但从楼主的描述来看,我感觉那究竟还是不是个“常量”都有待争论,呵呵。
回复
晨星 2006-08-20
那不就结了,说到底还得靠虚函数。
至于是否直接从const变量上返回及其初始化问题只是每个对象自己的实现细节。
回复
a_b_c_abc4 2006-08-20
但那样的话,如果是基类的指针指向子类的对象(或基类的引用引用到子类的对象)时怎么办?就直接用基类的?
=========================
没问题的,当基类的指针指向子类,调用到子类重写的虚函数,这个虚函数中访问到的常量也是子类中初始化的那个,因为传第过去的是子类对象的指针。
回复
lei001 2006-08-20
虚函数
回复
zenny_chen 2006-08-20
呵呵,可能是你没理解楼主的意思,他要得解决方案可能没你想得那么复杂。

楼主所说的大概是指访问超时的父类成员方法子类不需要去重写,该常量对外部也不需要公开。
回复
晨星 2006-08-20
但那样的话,如果是基类的指针指向子类的对象(或基类的引用引用到子类的对象)时怎么办?就直接用基类的?

“可以直接取用”就意味着“并不需要通过函数”吗?这又是什么道理呢?
回复
a_b_c_abc7 2006-08-20

是啊,在构造函数的初始化列表中初始化为多少,它就是多少。

支持zenny_chen
回复
zenny_chen 2006-08-20
To 楼主:

不需要啊。

class Base
{
private:
const unsigned long time_out;

public:

Base(unsigned long tmo) : time_out(tmo)
{
// Add your code here...
}

void SomeFunc(void)
{
// You may use the member time_out here...
}
};


class Child : public Base
{
public:

Child(unsigned long tmo) : Base(tmo)
{
// Add your code here.
}
};
回复
yiyuan 2006-08-20
好像还没有我的方法好,这样要写的代码更多了,虚函数还会白花时间。因为值是常量,本来就可以直接取用,并不需要通过函数。
回复
晨星 2006-08-20
我觉得满足楼主要求的最好的方法是基类应该定义一个:
virtual int getTimout() const;
然后每个子类都要实现它,具体的方法就看子类自己了。
回复
相关推荐
c#图片文字-字母-数字自动识别-深入代码-非常好
c#图片文字-字母-数字自动识别-深入代码-非常好
rtl8188eu_USB_linux.tar.gz
TP-LINK TL-WN725N V2 Linux 驱动安装
自己动手从0到1写嵌入式操作系统
这不是rtos源码分析的课程,而是为初级的同学设计,从基础原理讲师,一步步不断迭代设计rtos的课程! 用不到【2000行代码,汇编代码仅18行】(不含注释)实现一个精巧的可以运行在ARM Cortex-M内核芯片上的RTOS! 该RTOS功能与ucos类似,具体实现不同。学习之后,再去学习ucos之类的系统将没有什么问题。 1、系统地掌握RTOS的工作原理及其应用; 2、用更短的时间、更少的精力,学习RTOS相关知识; 3、设计出一个具备自己特色的RTOS。将其用作毕业设计、找工作的敲门砖; 4、提升技术水平,为升职加薪跳槽提供资本。
Control-flow Enforcement Technology Preview 2.0 spec
Intel CFI技术手册。 Intel CFI从CPU层次检测和防止ROP/JOP攻击,主要包含shadow stack和endbranch两项技术。 比软件层面的防御方法,如微软的CFG,更有效。目前Intel最新编译器已经支持此技术
STM32Cube和HAL库使用初体验-第5季第2部分
本季课程主要讲解STM32的全新开发方式:使用STM32CubeMX工具做图形化配置,自动生成初始化代码;添加各种中间件;使用HAL库和LL库来操作外设。结合朱老师物联网大讲堂专为nbiot物联网开发而设计的NB476开发板,本季课程能够让大家彻底掌握物联网时代以nbiot和低功耗STM32L4单片机为代表的典型开发模式,实战意义非常重要。 本课程是《朱有鹏老师单片机完全学习系列课程》第5季第2个课程,本部分以时钟和GPIO模块为案例来讲解STM32CubeMX工具加HAL库加MDK5这套开发体系的流程、技术细节,目标是让大家真正入门HAL库方式开发STM32单片机。后续再接着讲其他更复杂外设。
后备电池及储能电池巡检白皮书.pdf
后备电池及储能电池巡检白皮书,施耐德电气主编的,数据中心电池巡检白皮书。
内核的启动过程分析-uboot和系统移植第16部分
本课程为linux kernel移植的第3部分,主要内容是linux内核启动流程的代码分析和细节解读。本部分的学习目标是对linux内核的启动和构建过程有个清晰理解,对内核启动后的状态有清晰认识,从而能够帮助我们分析和解决内核移植过程中的问题。 本课程为uboot和系统移植阶段的第16部分,适合学习了uboot移植,需要继续学习ulinux内核移植的同学。
CListControl设置颜色
CListControl类派生,设置单元格颜色,丰富功能
微信公众平台开发入门
本套课程的设计完全是为初学者量身打造,课程内容由浅入深,课程讲解通俗易懂,代码实现简洁清晰。通过本课程的学习,学员能够入门微信公众平台开发,能够胜任企业级的订阅号、服务号、企业号的应用开发工作。 通过本课程的学习,学员能够对微信公众平台有一个清晰的、系统性的认识。例如,公众号是什么,它有什么特点,它能做什么,怎么开发公众号。 其次,通过本课程的学习,学员能够掌握微信公众平台开发的方法、技术和应用实现。例如,开发者文档怎么看,开发环境怎么搭建,基本的消息交互如何实现,常用的方法技巧有哪些,真实应用怎么开发。 通过合理的课程设计,结合讲师多年的教学经验、微信开发经验,轻松引导初学者掌握微信公众平台开发。
Linux系统管理员/网络管理员(PDF版)
两本非常好的Linux系统学习的书 系统管理主要介绍Linux系统的结构、管理、命令等 网络管理主要从网络协议角度出发阐述Linux的网络功能
ArcGIS for JavaScript
全面介绍ArcGIS for JavaScript 开发 让大家学会ArcGIS for JavaScript 开发
STM32F103中文数据手册
这个里面包含了STM32F103的各种型号的数据手册,方面理解
WPF中用于嵌入其他进程窗口的自定义控件(AppContainer)
WPF中用于嵌入其他进程窗口的自定义控件(AppContainer) 具体见博文:http://blog.csdn.net/zzzwwwppp11199988899/article/details/78131292
MSP430_RTC模块学习总结
这是自己在学习MSP430时,对RTC模块的总结,希望可以帮助刚入门者
CIET-2019-0504 数据中心运维管理人才标准.pdf
数据中心运维管理,人才标准,欢迎查看共同学习。
JavaEE详解-全程实战案例
肖老师这套课程:抛弃传统的知识点教学模式,采用全程案例教学模式,通过网上书城项目,把所有的JavaEE需要掌握的重要知识点都融入项目中,使学员可以掌握实用的知识,同时获得佳实践. 主要涉及内容有:多表查询、翻页、多条件查询、文件上传/下载、过滤器、监听器、AJAX、事务处理等。 采用案例教学模式,通过网上书城项目,把所有的JavaEE需要掌握的重要知识点都融入项目中
webrtc demo使用方法
谷歌webrtc demo的使用教程,webrtc源代码自行从官网下载,该教程只给出了源代码详细的使用方法,包括如何编译
朴素贝叶斯算法做文本分类-代码
https://blog.csdn.net/zzZ_CMing/article/details/89478436 朴素贝叶斯算法做文本分类,用的是谭松波酒店语料。
数据结构基础系列(1):数据结构和算法
数据结构课程是计算机类专业的专业基础课程,在IT人才培养中,起着重要的作用。课程按照大学计算机类专业课程大纲的要求,安排教学内容,满足需要系统学习数据结构的人。系列课程包含11个部分,本课为第1部分,介绍与数据结构、程序、算法相关的概念,训练初步的数据逻辑结构表达能力,和初步的算法分析能力。 系列课程的目标是帮助学习者系统掌握数据结构课程的相关知识,具备利用这些知识分析问题、解决问题的能力。课程提供视频、课件、例程、自测、实践要求、参考解答等整套的解决方案,帮助学习者达到目标。本课是系列课程中的第1部分,具体目标包括:了解数据结构在计算机类人才培养中的重要意义、掌握数据结构的基本概念、掌握数据结构的分类、理解抽象数据类型ADT及其作用,以及初步学会算法分析的“套路”。
FANUC的3210密码破解软件
FANUC 3210 密码破解软件,读取SRAM备份文件,不需要注册,完全免费。
PDB符号文件查看工具 symview,pdbxtract
PDB符号文件查看工具, 包含2个工具symview 和pdbxtract symview可查看文件所有原始信息 pdbxtract 可方便查看结构体等信息, 可导出头文件或xml
FANUC PMC密码破解程序
FANUC 31I PMC密码破解程序 用于OID,30I,31I等FANUC的密码破解
嵌入式工程师养成计划之——嵌入式软件工程师完全学习指南
本系列课程针对有意向学习嵌入式软件开发的童鞋,从零开始、深入浅出,内容涵盖:linux系统基础、shell、linux C编程、linux系统编程、网络编程、ARM体系结构及汇编语言、ARM裸机编程、linux系统移植、linux驱动开发等模块。分多个子课程逐步学习。 本课程是全套课程的第0部(前传),目的是讲解我们的整个视频学习体系路线图,同时也会对大家学习路线的一个指引。 本期课程共计4节课,主要回答了何为嵌入式、为何要学习嵌入式、什么人适合学嵌入式、究竟应该怎样去学嵌入式等问题。最后为大家详细介绍了我们的嵌入式软件工程师学习路线图,希望能够对大家的嵌入式学习之路有所指引。
Java基础核心技术:多线程(day16-day17)
本套Java视频完全针对初级学员,课堂实录,自发布以来,好评如潮!Java视频中注重与学生互动,讲授幽默诙谐、细致入微,覆盖Java基础所有核心知识点,同类Java视频中也是代码量大、案例多、实战性强的。同时,本Java视频教程注重技术原理剖析,深入JDK源码,辅以代码实战贯穿始终,用实践驱动理论,并辅以必要的代码练习。 通过20的课程学习,使学员掌握java核心语法、面向对象思想编程、异常处理、IO流、集合类、多线程、网络编程等。
yii2实战快餐系统
基于yii2开发的一套快餐系统,支持微信支付和支付宝支付。源代码托管到github上,搜索 abei2017/yii2.food 可以进入。 通过实战项目让yii2初学者更快的融入到实际项目开发中。
SIEMENS 840D SL调试手册.rar
里面含有840dsl的全部维修,调试,使用手册和资料,编程手册,报警诊断手册,PLC维修调试,系统报警代码,HMI高级手册.等.
(亲测正确版)ASP.NET-c#-捕捉网页快照-网站截图-网站缩略图
(亲测正确版)ASP.NET-c#-捕捉网页快照-网站截图-网站缩略图 ★★★★★★★★★★★★★★★★★★★★★★★★★★★ 建立网站缩略图源码 网页快照ASP.NET网站截图 网页快照ASP.NET c# 输入网址获取网站图片 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ 网上流传了很多网站缩略图的asp.net,但是都无法使用,本人亲测,该代码进行优化,速度快,效率高,占内存非常少。
FANUC B-64113C_01 0i-C 0i Mate-C连接说明书(硬件)册
FANUC B-64113C_01 0i-C 0i Mate-C连接说明书(硬件)册
jquery自己写的文件目录
jquery自己写的文件目录,HttpServlet+js+jsp
B站王红元(codewhy)vue课件以及笔记
B站王红元(codewhy)vue课件以及笔记
发帖
C++ 语言
创建于2007-09-28

5.9w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
申请成为版主
帖子事件
创建了帖子
2006-08-20 06:40
社区公告
暂无公告