sdk中很多类是抽像类,比如DgnECManager,但抽像类又通过它的静态方法返回了对象的引用:
DgnECManagerR dgnECManager = DgnECManager::GetManager();
抽象类不是不能创建实例对象的吗?那这里似乎应该是返回它的子类实例的引用了?
如果是这样的话,不知这里这个子类对象又是哪个类呢?谢谢老师。
抽象类虽然不能实例化,但它可以含有静态函数且该静态函数可以被直接调用。
其实我也不是C++语法的专家,但查看一下百度就能知道抽象类里面确实是可以含有静态函数的。(C#中叫方法,C++中还是叫函数为好)
Answer Verified By: 管华明
静态函数我知道可以含有。就是觉得这里返回抽象类的引用,似乎应该是返回抽象类的子类实例的引用。
这个应该是单例类,目的是让类只能被实例化一次。所以将类的构造函数私有化了。通常MSTN中的 manager 一般都是单例类。单例模式是一种常见的设计模式
记得有本书叫做“编程模式”,讲了几十种常见的设计对象的模式。苏工说的这个单例英文应该就是singleton。管工如果想深入学习面向对象的编程的话,建议抽空学习一下这本书。我记得当初BDN大会上国外专家就极力建议大家学习这本书,因为Bentley的对象设计也是按照这本书中的提供的模式进行设计的。
问题是抽像类本身不能实例化,api文档写的这个类是abstract类。
所以我才觉得这里似乎实际返回的是子类单例实例。
C++中是没有abstract关键字的。,这个是API中dgnEcManager的头文件。使用虚函数让你不能直接new这个类。而.net里的封装的类就更直观了。