如何创建从同一类继承的不同对象的向量?

时间:2020-02-21 17:19:37

标签: c++ oop

我有不同的对象,例如Triangle,Plane,Sphere等,它们都从OBJECTS类继承。我想创建这些不同对象的向量,然后遍历每个元素并对它们执行操作。我正在尝试制作光线跟踪器,我想创建将许多不同的对象放置到场景中,但是我不知道如何。 OBJECTS是一个抽象类,因此我无法创建矢量,因为我可以创建它的实例。我应该创建一个全新的类并让所有形状类都继承吗?还是应该重新制作对象类,使其不再抽象?帮助表示赞赏。我的下一个最佳猜测是对象指针。

1 个答案:

答案 0 :(得分:1)

如评论所建议,您可以执行以下操作。

public class NotifyListener extends NotificationListenerService{    
        public static boolean listnerConnected = false;
    @Override
        public IBinder onBind(Intent intent) {
            Log.d(name,"onBind Called");
            listnerConnected = true;
            return super.onBind(intent);
    }   

        @Override
        public void onDestroy()
        {       
            super.onDestroy();        
            Log.e("destroy", "called");
            listnerConnected = false;

        }
}

只需创建对象指针的向量即可。请注意,您不必使用class Object{ public: virtual ~Object()= default; virtual void foo() = 0; }; class Pane: public Object{ public: ~Pane() = default; void foo() override{ std::cout << "Hello Pane" << std::endl; } }; class Triangle: public Object{ public: ~Triangle() = default; void foo() override{ std::cout << "Hello Triangle" << std::endl; } }; int main(){ std::vector<std::unique_ptr<Object>> objects; objects.emplace_back(std::make_unique<Triangle>()); objects.emplace_back(std::make_unique<Pane>()); for(auto &object: objects){ object->foo(); } return 0; } ,但我强烈建议您这样做,因为您无需在最后删除对象。

这个简单程序的输出是:

unique_pointers