对抽象类的引用
回答
对抽象类的引用就像是指向抽象类的指针:它需要引用抽象类的某个非抽象子类的对象。您可以使用类似这样的引用来使用.
语法在引用的类上调用虚拟方法,方式类似于指向Java中接口的指针。
抽象类被设计为派生自。 Liskov替换原则大致指出,使用从抽象基础派生的类型的抽象部分的任何内容都应该以多态方式使用基础同样适用。这意味着应该使用参考或指向基地的指针。
+1将其链接到Liskov替代原则。这些有价值的提示指导新手去探索软件设计/编程的更深层领域,从而在相邻的隔间里更有能力的同事:) – 2011-02-16 17:20:31
class Abstract
{
public:
virtual void foo() = 0;
};
class Implementation : public Abstract
{
public:
void foo() { std::cout << "Foo!" << std::endl; }
};
void call_foo(Abstract& obj) { obj.foo(); }
int main()
{
Abstract *bar = new Implementation();
call_foo(*bar);
delete bar;
}
bar
是pointer
到的抽象类。它可以使用*
运算符取消引用并作为reference
传入call_foo
,因为那是call_foo
要求的内容(Abstract*
将要求指针,而Abstract&
要求引用)。
在上述中,参照抽象类被传递,并且当foo()
使用.
符号(而不是指针->
符号)调用,它打印Foo!
,因为那是Implementation
做什么。
希望这会有所帮助。
在C++中的引用表现(几乎)像隐藏的指针。特别是,您可以使用指针获得相同的多态行为,您可以通过引用来实现它。也就是说,下面是(几乎)等效的
int *i = &a;
int &j = a;
假设a是在前面几行中定义的整数。参考文献j出现后,与(* i)的出现完全等价。主要区别在于引用不会给你内存管理带来的痛苦,而指针则会(你有责任处理新的和删除的内容)。另外,一个指针不必指向某个东西,而一个引用不能指向任何东西。除此之外,你可以认为他们的行为是一样的。
因此,抽象对象的引用是绝对合法的。你会经常在函数签名中找到它,其中多态行为可以通过引用或指针来实现。但是参考文献得到更轻的语法,如下面的代码段示出了
A a;
A* ptr = &a;
A& ref = a;
ref();
ptr->operator()();
(*ptr)();
假设类A重载operator()
。
- 1. 引用抽象类类型的结构
- 2. 引用抽象类中的inherting类
- 3. 传递对继承自抽象基类的类的引用
- 4. JPA:坚持引用抽象类集合的对象
- 5. @JvmField对通用/抽象类
- 6. 如何在抽象java类中获取对子类的引用
- 7. 对通用接口的抽象引用
- 8. 如何在Qt信号中使用对抽象类的引用?
- 9. 对抽象类的引用无法传递给线程函数?
- 10. 抽象基类的抽象子类
- 11. 抽象类实现Cloneable;抽象对象的clone()
- 12. 使用抽象类
- 13. 从非抽象类派生抽象类
- 14. 试图访问一个抽象类的子类的引用
- 15. Angular2 init抽象类与对象文字
- 16. 为抽象类创建对象
- 17. 复制交换成语类与抽象类的引用
- 18. 访问抽象父类中子类的引用
- 19. 对ScenarioContext.Current有用的抽象?
- 20. 我该如何引用它所扩展的类引用的对象的[非抽象]字段?
- 21. 将抽象类对象从映射存储到抽象类参考
- 22. 在Django中使用抽象类从多对多检索对象
- 23. 具有抽象类参数的抽象方法的Java抽象类
- 24. PHP类引用PDO对象
- 25. 在抽象类
- 26. 抽象类
- 27. AS3 - 抽象类
- 28. c#抽象类
- 29. Automapper抽象类
- 30. 抽象类
这个问题太含糊。发布代码示例并解释它为什么会让您感到困惑。 – aschepler 2011-02-16 16:28:19
这是否意味着在另一端可能有任何具体的子类? – Piskvor 2011-02-16 16:30:32