Сначала записка о наследовании.Это
class child : parent
будет использовать наследование по умолчанию private
.Это то же самое, что написать
class child : private parent
, и это означает, что у родителей public
и protected
членов будет private
у ребенка, следовательно, метод input()
будет недоступен извне ребенка,Код должен для этого не компилироваться, если позже вы попытаетесь вызвать метод input()
на дочернем экземпляре (то есть извне).При запуске с C ++ вы почти всегда хотите сделать наследование открытым.Поэтому измените его на:
class child : public parent
или
struct child : /* public */ parent // struct has 'public' inheritance by default
Позже вы создаете один parent
и один child
экземпляр.Я переименовал экземпляры p
и c
для ясности.Как правило, следует избегать использования того же имени для экземпляров, что и для классов.
parent p;
child c;
p.input();
c.output();
p
теперь содержит (состоит из) один std::string
экземпляр с именем str
.c
также имеет один экземпляр std::string
с именем str
, но это разные экземпляры / объекты (если вы не сделаете их static
, но пока не делайте).Каждый экземпляр несет свои собственные данные.Даже два экземпляра одного и того же класса работают, так что это также ничего бы не повторило:
child c1, c2;
c1.input();
c2.output();
Однако это будет работать, так как один и тот же экземпляр используется как для ввода, так и для вывода:
child c;
c.input();
c.output();