Member 13118935 Ответов: 1

Как вызвать BUFFER::set(0) в output() класса XNOR?


Как вызвать BUFFER::set(0) в выводе()
из класса XNOR? Исключающее или буфер наследует класс как защищенных где установить() общественная или и исключающее ИЛИ исключающее ИЛИ наследуемый класс?

Что я уже пробовал:

#include<iostream>
#include<vector>
using namespace std;

/*void operator =(vector<bool>x,vector<bool>y)
{   int i=0;
    while(i<y.size())
    {
        x.push_back(y[i]);
        i++;
    }
}*/
class gate
{
public:
    bool output();
};

class BUFFER: public gate
{
    bool x;
public:
    void set(bool data){ x=data;}
    bool output()
    {
        return x;
    }
};
class OR: public gate
{
    vector<bool>v;
public:
    void set(vector<bool> data){ copy(data.begin(),data.end(),back_inserter(v));}
    bool output()
    {
        while(v.size()>1)
        {
            v.push_back(v[0]+v[1]);
            v.erase(v.begin(),v.begin()+2);
        }
        return v[0];
    }
};
class AND: public gate
{
    vector<bool>v;
public:
    void set(vector<bool> data){ copy(data.begin(),data.end(),back_inserter(v));}
    bool output()
    {
        while(v.size()>1)
        {
            v.push_back(v[0]*v[1]);
            v.erase(v.begin(),v.begin()+2);
        }
        return v[0];
    }
};
class NOT: public gate
{
    bool x;
public:
    void set(bool data){ x=data; }
    bool output()
    {
        return 1-x;
    }
};
class NAND: public gate, protected NOT,AND
{
    vector<bool> v;
public:
    void set(vector<bool> data){ copy(data.begin(),data.end(),back_inserter(v));}
    bool output()
    {
        AND::set(v);
        NOT::set(AND::output());
        return (NOT::output());
    }
};
class NOR: public gate, protected OR,NOT
{
    vector<bool>v;
public:
    void set(vector<bool> data){ copy(data.begin(),data.end(),back_inserter(v));}
    bool output()
    {
        OR::set(v);
        NOT::set(OR::output());
        return NOT::output();
    }
};
class XOR: public gate, protected NOT,AND,OR,BUFFER
{
    vector<bool> v;
public:
    void set(vector<bool> data){ copy(data.begin(),data.end(),back_inserter(v));}
    bool output()
    {
        while(v.size()>1)
        {
            vector<bool> d,g,c;
            d.push_back(v[0]);cout<<"v[0] \t"<<v[0];
            NOT::set(v[1]);cout<<"\nv[1] \t"<<v[1];
            d.push_back(NOT::output());cout<<"\nNOT::output() \t"<<NOT::output()<<"\n";
            for(int i=0;i<d.size();i++) cout<<d[i]<<"\t";
            AND::set(d);
            //d.clear();
            c.push_back(AND::output());cout<<"\nAND::output() \t"<<AND::output();
           // cout<<"1 and"<<AND::output();
            g.push_back(v[1]);cout<<"\nv[1] \t"<<v[1];
            NOT::set(v[0]);cout<<"\nv[0] \t"<<v[0];
            g.push_back(NOT::output());cout<<"\nNOT::output() \t"<<NOT::output()<<"\n";
            for(int i=0;i<g.size();i++) cout<<g[i]<<"\t";
            AND::set(g);
            c.push_back(AND::output());cout<<"\nAND::output() \t"<<AND::output()<<"\n";
            for(int i=0;i<c.size();i++) cout<<c[i]<<"\t";
           // cout<<"\t2 and"<<AND::output();
            OR::set(c);
            cout<<"\nOR::output"<<OR::output();
            v.push_back(OR::output());
            v.erase(v.begin(), v.begin()+2);
        }
        return v[0];
    }
};

class XNOR: public gate, protected XOR//, NOT
{
    vector<bool> v;
public:
    void set(vector<bool> data){ copy(data.begin(),data.end(),back_inserter(v));}
    bool output()
    {
        BUFFER::set(0);
        //XOR::set(v);
        //XOR:output();
        //NOT::set(XOR::output());
        return 0;//NOT::output();
    }
};

int main()
{
    int a;
    bool x;
    vector<bool> v;
    while(1)
    {
        cin>>a;
        for(int i=0;i<a;i++)
        {
            cin>>x;
            v.push_back(x);
        }
            XOR d;
            d.set(v);
            cout<<"OUTPUT \t"<<d.output();
    }
    return 0;
}

Richard MacCutchan

Точно так же, как вы назвали бы его из любого другого места.

1 Ответов

Рейтинг:
2

KarstenK

Вы должны лучше понимать наследственность. Если вы используете protected, то доступ только в дочернем классе, но для внешнего он является частным.

Урок на тему: Наследование C++ Подумайте о том, чтобы прочитать некоторые уроки из этого урока.


Member 13118935

Но я унаследовал буфер класса в классе XOR, а затем класс XOR в XOR. Также класс содержит исключающее ИЛИ унаследованных функций из класса или класс и & класса не . Так что, полагаю, я унаследовал все как следует.