//=========================================================================
class CPU;
class Memory;
class IOdevice;
class Motherboard
{
string name;
protected:
Memory mem;
CPU cpu;
IOdevice io;
public:
Motherboard();
};
Motherboard::Motherboard()
{
name = "Системная плата/шина данных";
cpu = CPU();
mem = Memory();
io = IOdevice();
}
//=========================================================================
class CPU : public Motherboard
{
string name;
public:
CPU();
};
CPU::CPU()
{
name = "Центральный процессор";
}
//=========================================================================
class Memory : public Motherboard
{
string name;
//хранящиеся данные
string login;
string password;
public:
Memory();
};
Memory::Memory()
{
name = "Память";
login = "";
password = "";
}
//=========================================================================
class IOdevice : public Motherboard
{
string name;
public:
IOdevice();
};
IOdevice::IOdevice()
{
name = "Устройство ввода/вывода";
}
//=========================================================================
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
Мне главное чтобы я мог из любого класса связаться с объектом любого другого класса (для этого я делаю наследование). Но запутался как правильно построить иерархию. Что должно идти за чем? И почему не работает предварительно объявление классов? Как решить проблему скажите пожалуйста?
Если внутри класса Вы пишете вот так
Memory mem;
то компилятору нужно знать размер класса Memory в этом месте. Если он имеет только предварительное определение, то он этого сделать не может. Поэтому, нужно либо через указатель
Memory *mem;
либо через умный указатель
std::unique_ptr<Memory> mem;
Либо расставить определения классов правильно (тогда не нужно будет предварительное определение), но это возможно только в том случае, если у Ваших классов нет циклицеских зависимостей.
какой-то станный дизайн класса - почему наследуется память от материнки ? процессор от материнки ? и т.д. - как может память или процессор или устройство ввода вывода являться материнской платой ? отношение is a
здесь не подходит вобще, вам нужно has a
,
Тоесть я бы сперва дизайн поменял - убрал бы насследование вообще, а в классе MotherBoard
аггрегировал бы все остальное, тоесть сделал бы память, процессор, устройство ввода вывода члены класса MotherBoard
- а тогда думаю уже и проблем с forward declaration
не будет
Виртуальный выделенный сервер (VDS) становится отличным выбором
Добрый вечер, столкнулся с проблемойПытаюсь сделать, чтобы в мобильной версии страницы, при открытом slidemenu скроллилось оно, а не содержимое...
День добрыйЕсть небольшой скриптик который с помощью ajax-запроса получает данные посредством api
Вот ссылка раздела сайта где разные бренды разбиты по одинаковым плиточкамПри разной ширины экрана, плитки также имеют разный размер