91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

如何自定義c++ visit函數

c++
小樊
87
2024-09-16 13:37:40
欄目: 編程語言

在C++中,實現一個自定義的visit函數可以通過模板和重載技術來完成。這里是一個簡單的例子,展示了如何創建一個visit函數,它可以接受不同類型的參數并根據參數類型執行相應的操作。

#include<iostream>
#include<string>

// 定義一個基類,用于多態
class Animal {
public:
    virtual ~Animal() = default;
};

// 定義兩個派生類,分別表示狗和貓
class Dog : public Animal {
public:
    void bark() const {
        std::cout << "Woof!"<< std::endl;
    }
};

class Cat : public Animal {
public:
    void meow() const {
        std::cout << "Meow!"<< std::endl;
    }
};

// 定義一個訪問者類,用于實現雙重分派
class Visitor {
public:
    virtual void visit(const Dog& dog) = 0;
    virtual void visit(const Cat& cat) = 0;
};

// 定義一個具體的訪問者類,實現對狗和貓的訪問操作
class AnimalVisitor : public Visitor {
public:
    void visit(const Dog& dog) override {
        dog.bark();
    }

    void visit(const Cat& cat) override {
        cat.meow();
    }
};

// 修改Animal類,添加accept方法,用于接受訪問者
class Animal {
public:
    virtual ~Animal() = default;

    virtual void accept(Visitor& visitor) const = 0;
};

// 更新Dog和Cat類,實現accept方法
class Dog : public Animal {
public:
    void bark() const {
        std::cout << "Woof!"<< std::endl;
    }

    void accept(Visitor& visitor) const override {
        visitor.visit(*this);
    }
};

class Cat : public Animal {
public:
    void meow() const {
        std::cout << "Meow!"<< std::endl;
    }

    void accept(Visitor& visitor) const override {
        visitor.visit(*this);
    }
};

int main() {
    Dog dog;
    Cat cat;

    AnimalVisitor visitor;

    dog.accept(visitor); // 輸出 "Woof!"
    cat.accept(visitor); // 輸出 "Meow!"

    return 0;
}

在這個例子中,我們首先定義了一個基類Animal,以及兩個派生類DogCat。然后,我們定義了一個訪問者類Visitor,它包含兩個純虛函數visit,分別用于訪問DogCat。接下來,我們定義了一個具體的訪問者類AnimalVisitor,它實現了Visitor接口,并在visit方法中調用了DogCat的相應方法。最后,我們修改了Animal類,添加了一個accept方法,用于接受訪問者。在DogCat類中,我們實現了accept方法,并在其中調用了訪問者的visit方法。

這樣,我們就實現了一個自定義的visit函數,它可以根據傳入的參數類型自動選擇相應的操作。在main函數中,我們創建了一個AnimalVisitor對象,并使用它訪問DogCat對象,分別輸出"Woof!“和"Meow!”。

0
成安县| 建始县| 年辖:市辖区| 宁河县| 吴桥县| 囊谦县| 潼关县| 靖西县| 晋州市| 屯留县| 罗定市| 庆阳市| 武夷山市| 芒康县| 交口县| 凭祥市| 澄江县| 油尖旺区| 五大连池市| 昭平县| 上林县| 甘德县| 永川市| 九龙坡区| 新丰县| 常德市| 六安市| 金湖县| 教育| 彭水| 鲁甸县| 京山县| SHOW| 蚌埠市| 阿坝| 安化县| 定兴县| 澄迈县| 长海县| 贵定县| 柳州市|