LSP является правилом о контракте классов: если базовый класс удовлетворяет контракт, то LSP производные классы должны также удовлетворить тот контракт.
В Псевдо-Python
class Base:
def Foo(self, arg):
# *... do stuff*
class Derived(Base):
def Foo(self, arg):
# *... do stuff*
удовлетворяет LSP, если каждый раз Вы называете Нечто на Производном объекте, это дает точно те же результаты как вызов Нечто на Базовом объекте, пока аргумент является тем же.
Да. Структура подобна классу, но по умолчанию используется public:
в определении класса и при наследовании:
struct Foo
{
int bar;
Foo(void) :
bar(0)
{
}
}
Учитывая ваш другой вопрос, я бы посоветовал вам прочитать несколько руководств . Они ответят на ваши вопросы быстрее и полнее, чем мы.
В C ++ мы можем объявить / определить структуру точно так же, как класс, и иметь конструкторы / деструкторы для структур и определить в них переменные / функции. Единственное отличие - это область действия определенных переменных / функций по умолчанию. Помимо указанного выше различия, в основном вы должны иметь возможность имитировать функциональность класса с помощью структур.
struct HaveSome
{
int fun;
HaveSome()
{
fun = 69;
}
};
I'd rather initialize inside the constructor so I don't need to keep the order.
Да, но если у вас есть структура в союзе, вы не сможете. Это то же самое, что и класс.
struct Example
{
unsigned int mTest;
Example()
{
}
};
Объединения не разрешают использование конструкторов в структурах. Однако вы можете создать конструктор на объединении. Этот вопрос относится к нетривиальным конструкторам в объединениях.
В C ++ единственное различие между классом
и структурой
состоит в том, что члены и базовые классы по умолчанию являются закрытыми в классах, тогда как они являются общедоступными. по умолчанию в структурах.
Таким образом, структуры могут иметь конструкторы, а синтаксис такой же, как и для классов.
struct TestStruct {
int id;
TestStruct() : id(42)
{
}
};
Да, структуры и классы в C ++ такие же, за исключением того, что члены структур по умолчанию являются общедоступными, тогда как члены классов по умолчанию являются частными. Все, что вы можете делать в классе, вы должны уметь делать в структуре.
struct Foo
{
Foo()
{
// Initialize Foo
}
};