【发布时间】:2012-06-28 06:55:13
【问题描述】:
我首先要说我知道只有非静态成员函数可以是虚拟的,但这就是我想要的:
-
定义接口的基类:因此我可以使用基类指针来访问函数。
-
出于内存管理目的(这是一个内存有限的嵌入式系统),我希望静态分配覆盖函数。我接受这样的结果,即使用静态函数,我如何操作函数中的数据会受到限制。
我目前的想法是,我可以通过将其封装为实际上是静态的函数来保留轻重载函数。
请不要告诉我我需要重新考虑我的设计。这就是我问这个问题的原因。如果你想告诉我我最好使用 c 和回调,请指导我阅读一些材料来解释使用面向对象方法的缺陷。是否存在满足我列举的要求的面向对象的设计模式?
【问题讨论】:
-
当您说“静态”时,您的意思是“非虚拟”?当您说“重载”时,您的意思是覆盖吗?重载是同名但不同的参数,因此是不同的功能。覆盖是相同的参数,并且要求被覆盖的函数是虚拟的。
-
@MvG 我对区别很模糊。覆盖是我所追求的......我会编辑它。
-
@VanDarg:程序在嵌入式系统上运行的事实正在推动不消耗堆栈空间的愿望。我认为(但我以前错了,我是新手)声明函数静态应该可以将代码保持在闪存中。
-
"出于内存管理的目的...我希望静态分配重载函数。" 我认为您在这里有一个误解。代码是否存在于闪存中与方法是静态的还是非静态的无关。您可能想到局部变量,除非它们被声明为静态,否则它们确实会占用堆栈空间。
-
好的,这是教育性的。因此,如果我理解正确,对于一个类成员函数的多个实例,通常不会将其作为实例的一部分进行复制,对吗?如果这是正确的,那么我不应该看到我的堆栈需求通过将函数设为静态来缩小?