代码之家  ›  专栏  ›  技术社区  ›  Lion King

在实例应用于建筑设计模式时,出现了一些错误。

  •  0
  • Lion King  · 技术社区  · 6 年前

    我已经编写了一个应用“builder”设计模式的代码,但是出现了一些错误:

    代码:

    类生成器{ 公开: 国际咨询公司; 国际杯; 串米味; 建设者*糖(内糖){ 这个->m_-suger=糖; 把这个还给我; } 建筑商*杯(国际杯){ 这个->m_cup=cup; 把这个还给我; } builder*风味(字符串风味){ 这->m洹flavor=味道; 把这个还给我; } tea*构建()。{ 还新茶(这个); } }(二) 分类茶{ 公开: 国际咨询公司; 国际杯; 串米味; 茶(建筑商*B){ M_-suger=B->M_-suger; m_cup=b->m_cup; m洹味=b->m洹味; cout<<“hot”<<b->m_cup<<“一杯茶混合在一起!,带有“<<b->M<<endl; } }(二) int main(int argc,char*argv[]){ 茶*薄荷茶=new builder()->杯(2)->糖(3)->香料(“薄荷”)->build(); 返回0; }

    代码:

    class Builder {
    public:
        int m_suger;
        int m_cup;
        string m_flavour;
    
        Builder* sugar(int sugar) {
            this->m_suger = sugar;
            return this;
        }
        Builder* cup(int cup) {
            this->m_cup = cup;
            return this;
        }
        Builder* flavour(string flavour) {
            this->m_flavour = flavour;
            return this;
        }
        Tea* build() {
            return new Tea(this);
        }
    };
    
    class Tea {
    public:
        int m_suger;
        int m_cup;
        string m_flavour;
    
        Tea(Builder* b) {
            m_suger = b->m_suger;
            m_cup = b->m_cup;
            m_flavour = b->m_flavour;
            cout << "Hot " << b->m_cup << " cup of tea is comming!, with " << b->m_flavour << endl;
        }
    };
    
    int main(int argc, char *argv[]) {
        Tea* mintTea = new Builder()->cup(2)->sugar(3)->flavour("mint")->build();
        return 0;
    }
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Max Langhof    6 年前

    你现在的情况是 Builder Tea 茶叶 建筑商 在开始定义函数之前,这两个类都可以是完整的类。

    class Tea; // Forward declaration is needed so Builder can mention Tea in its member function declarations.
    
    class Builder {
    public:
        int m_suger;
        int m_cup;
        string m_flavour;
    
        Builder* sugar(int sugar);
        Builder* cup(int cup);
        Builder* flavour(string flavour) ;
        Tea* build();
    };
    
    class Tea {
    public:
        int m_suger;
        int m_cup;
        string m_flavour;
    
        Tea(Builder* b);
    };
    

    Builder* Builder::sugar(int sugar) {
        this->m_suger = sugar;
        return this;
    }
    Builder* Builder::cup(int cup) {
        this->m_cup = cup;
        return this;
    }
    Builder* Builder::flavour(string flavour) {
        this->m_flavour = flavour;
        return this;
    }
    Tea* Builder::build() {
        return new Tea(this);
    }
    
    Tea::Tea(Builder* b) {
        m_suger = b->m_suger;
        m_cup = b->m_cup;
        m_flavour = b->m_flavour;
        cout << "Hot " << b->m_cup << " cup of tea is comming!, with " << b->m_flavour << endl;
    }
    

    Demo!

    代码的第一部分通常是放在标题中的部分。( .h #include .cpp

    注意:正确的呼入 main

    Tea* mintTea = (new Builder())->cup(2)->sugar(3)->flavour("mint")->build();
    

    new Builder() .