【发布时间】:2011-02-04 07:18:05
【问题描述】:
获取这个简单的代码:
class A{
public:
virtual void foo() = 0;
void x(){ foo(); }
};
class B: public A{ foo(){ ... } };
main(){
B b;
b.x();
}
我想要的是构建一个抽象类,该类将具有一个函数,该函数将调用一个期望它在派生类中实现的函数
问题是我似乎无法使它工作,编译器说它无法编译,因为它找不到要在 x() 中执行的 foo() 的引用(或类似的东西) ) 的基类。这能行吗?谁能给我一个例子吗?
编辑:它似乎只是在“foo();”时不起作用位于 A 类(基类)的析构函数内...
这让我很困惑。 =[
EDIT2:这有多有趣。我刚刚创建了一个 callfoo(){ foo();现在它编译好了,但如果我尝试直接从基类 A 的析构函数中调用纯抽象函数,它会给我错误......奇怪。有人对此有任何想法吗? O_o
请问有什么帮助吗?
谢谢,
乔纳森
更新
它在析构函数之外工作。现在我只是糊涂了。
尝试将“foo()”放在 A(base) 类的析构函数中,至少对我来说不是编译...
有什么帮助吗?
【问题讨论】:
-
我会回到这里接受有关此问题的任何答案,如果我做错与否,我在 vmware 内的 linux 盒子中使用 gcc 4.3.2...感谢所有答案到目前为止,我非常喜欢这个网站...
-
一切都与效率有关。只有在构造 B 对象的 A 部分时,您对 B 本身一无所知(因此不能调用它的方法),才能实现创建和销毁对象的最有效方法。
标签: c++ class inheritance abstract