Heim  >  Artikel  >  Backend-Entwicklung  >  Eine kurze Einführung in C++-Entwurfsmuster und Prototypmuster

Eine kurze Einführung in C++-Entwurfsmuster und Prototypmuster

黄舟
黄舟Original
2017-01-18 14:57:581313Durchsuche

Definition: Verwenden Sie Prototypinstanzen, um die zu erstellenden Objekttypen anzugeben, und erstellen Sie neue Objekte durch Kopieren dieser Prototypen.

Das Prototypmuster besteht eigentlich darin, aus einem Objekt ein weiteres anpassbares Objekt zu erstellen, ohne Einzelheiten der Erstellung zu kennen.

Der Prototypmodus berücksichtigt hauptsächlich tiefe Kopien und flache Kopien. Im C++-Klassendesign ist der Kopierkonstruktor eine flache Kopie, und wenn der Zuweisungsoperator überladen ist, ist er eine tiefe Kopie.

Flache Kopie: Alle Variablen des kopierten Objekts enthalten die gleichen Werte des Originalobjekts und alle Verweise auf andere Objekte verweisen weiterhin auf das Originalobjekt.

Tiefe Kopie: Richten Sie die Variable des Referenzobjekts auf das kopierte neue Objekt und nicht auf das ursprünglich referenzierte Objekt.

Testfall:

[code]int main(){
    //生成对象
    ConcretePrototype * conProA = new ConcretePrototype();
    //复制自身
    ConcretePrototype *conProB = conProA->Clone();   //先clone后调用拷贝构造函数, Output: clone constructor

    delete conProA;
    conProA = NULL;

    delete conProB;
    conProB = NULL;

    return 0;
}

Prototyp-Implementierung

[code]//接口
class Prototype{
public:
    Prototype(){}
    virtual ~Prototype(){}
    virtual Prototype *Clone() = 0;
};

//实现
class ConcretePrototype: public Prototype{
public:
    ConcretePrototype(): m_counter(0) {}
    virtual ~ConcretePrototype(){}
    //拷贝构造函数
    ConcretePrototype(const ConcretePrototype &rhs){
        std::cout << "constructor\n";
        m_counter = rhs.m_counter;
    }

    //复制自身
    virtual ConcretePrototype *Clone(){
        //调用拷构造函数
        std::cout << "clone\n";
        return new ConcretePrototype(*this);
    }

private:
    int m_counter;
};

Das Obige ist der Inhalt des Prototypmodus des C++-Entwurfsmusters. Weitere Informationen finden Sie hier die chinesische PHP-Website (www.php.cn)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn