0

オブジェクトを作成した後に関数をオーバーロードすることで、クラス関数の動作をまったく異なるものにすることは可能ですか?

たとえば、Poop というクラスがあり、start() という関数があります。start() が Poop のインスタンスごとにまったく異なることをしたいのです。

したがって、a.start() を呼び出すと、for ループが 10 回実行される可能性があり、b.start() を呼び出すと、ユーザーに 2 つの数値を要求して合計を返すなど、まったく別のことが行われる可能性があります。

私のコード:

obj.cpp

#include <string>
#include <obj.h>

//Concstructor
Poop::Poop (std::string get_name) {
    my_name = get_name;
}

//Obj functions implement here
void Poop::set_name(std::string name) {
    my_name = name; 
}

// I want to change this so that each object can behave differently
// when they call .start()
void Poop::start() {
    std::cout << "I am poop_1's start call" << std::endl;
}


//Event objects
Poop poop_1("bob");

obj.h

#include <iostream>
#include <string>

// defin obj
class Poop {
    //class attrs; private
    private:
        std::string my_name;
    public: //class function
        Poop(std::string); //constructor
        std::string get_name() {return (my_name);}
        void set_name(std::string); //sets Obj name
        void start(); // for the custom event; need to change this somehow

};

// global event objects
extern Poop poop_1;
4

3 に答える 3

3

このようなことを行う一般的な方法の 1 つは、Strategy パターンを使用することです。の各インスタンスには、戦略オブジェクト(純粋仮想クラスを拡張するクラスのインスタンス)Poopへの参照が含まれ、戦略オブジェクトに委任されます。strategystart()

もう 1 つの方法は、スクリプト言語を実装するライブラリを用意し、スクリプト言語でさまざまな動作を実装することです。各オブジェクトには異なるスクリプトを含めることができ、start()それを実行できます。

于 2013-06-09T01:48:28.930 に答える