Форум программистов, компьютерный форум CyberForum.ru

копирующий конструктор и иерархия - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 5.00
Alilidor
0 / 0 / 0
Регистрация: 21.05.2010
Сообщений: 8
21.05.2010, 22:23     копирующий конструктор и иерархия #1
Создать иерархию типов, описывающую - студента, отца семейства и студента-отца семейства. Классы должны конструкторы, включая конструктор копирования, виртуальные деструкторы, перегруженные функции вывода в поток и ввода в поток.

т.е. программа как я понимаю будет типа
class Father
{public: father(string name, int childnumb)}

class student
{public: student(string name, int curs)}

class father-student: public student, public father
{public: student-father: father, student}

Получается что у отца-студента 2 имени и это видимо решается с помощью копирующего конструктора. Напишите пожалуйста как именно, не или примерчик какой похожий, а то везде про копирующий конструктор один и тотже пример с массивом (
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
21.05.2010, 23:00     копирующий конструктор и иерархия #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Father {
public:
    Father(const std::string &name, int childnum);
    virtual ~Father();
};
 
class Student
{
public:
    Student(const std::string &name, int curs);
    virtual ~Student();
};
 
class FatherStudent: public Student, public Father
{
public:
    FatherStudent(const std::string &name, int curs, int childnum):
        Student(name, curs), Father(name, childnum)
    {
    }
};
Добавлено через 7 минут
Ну а если надо, чтобы было одно имя на двоих, надо сделать виртуальное наследование - и Father, и Student виртуально наследуют от некоего класса, обеспечивающего хранение имени.
Alilidor
0 / 0 / 0
Регистрация: 21.05.2010
Сообщений: 8
21.05.2010, 23:28  [ТС]     копирующий конструктор и иерархия #3
т.е. Father(const std::string &name, int childnum);FatherStudent(const std::string &name, int curs, int childnum)-это все копирующие конструкторы? т.е. в копирующем конструкторах просто ссылка на один и тотже обьект? Заранее благодорю ) в мануале такого нету почемуто (
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
22.05.2010, 09:44     копирующий конструктор и иерархия #4
Это не копирующие конструкторы, они и не нужны. Копирующий конструктор извлекает данные из объекта того же самого класса. То есть, такие конструкторы были бы описаны так:
C++
1
2
3
Father::Father(const Father& src);
Student::Student(const Student& src);
FatherStudent::FatherStudent(const FatherStudent &src): Student(src), Father(src) {}
В данном случае ссылка на src, имеющий тип FatherStudent, автоматически приводится к нужному типу-предку, и конструкторы Father и Student получают подобъект нужного типа. То есть, для конструирования Student из src выдирается та часть FatherStudent, что унаследована от Student, а для Father выдёргивается кусочек, соответствующий типу Father. Надеюсь, мне не надо упоминать, что при наследовании предок целиком входит в состав потомка и в потомке завсегда можно выделить кусочек, полностью соответствующий предку, как если бы в потомке был попросту объявлен член соответствующего типа?
C++
1
2
3
4
5
6
7
8
9
class FatherStudent {  // Аналог простого наследования
public:
    FatherStudent(const std::string &name, int curs, int childnum): student(name, curs), father(name, childnum) {}
// Ну и автоматическое преобразование ссылок и указателей с членами, конечно, не работает
    FatherStudent(const FatherStudent &src): student(src.student), father(src.father) {}  
private:
    Student student;
    Father father;
};
Alilidor
0 / 0 / 0
Регистрация: 21.05.2010
Сообщений: 8
22.05.2010, 13:09  [ТС]     копирующий конструктор и иерархия #5
Цитата Сообщение от Nick Alte Посмотреть сообщение
Father(const std::string &name, int childnum);
Там же переменные еще в private поидее, типа int numb=childnumb; string str = name;
но потом в main() что я неправильно делаю?
И посоветуйте книгу пожалуйста по этой теме.
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
22.05.2010, 19:54     копирующий конструктор и иерархия #6
Ну что касается книги, то надо взять Страуструпа в обязательном порядке. Ну и ещё каких-нибудь спецов хороших. Например, Стенли Липпман.

А вот вопрос я что-то совершенно не понял. По отдельности слова знакомые, а в такой комбинации как-то не могу выделить из них смысл...
Alilidor
0 / 0 / 0
Регистрация: 21.05.2010
Сообщений: 8
22.05.2010, 20:39  [ТС]     копирующий конструктор и иерархия #7
Ну первый пример, который вы давали, там вот так вот должно быть?
C++
1
2
3
4
5
6
7
8
9
10
class father
{   string name;
    int numb;
public:
    father(const string &str, int num)
    {   name = str;
        numb = num;
    }
    father();
};
З.Ы. Я так и знал что стоит сразу покупать Страуструпа, но почемуто купил справочники Шилдта (
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2010, 23:07     копирующий конструктор и иерархия
Еще ссылки по теме:

закрытый копирующий конструктор C++
Копирующий конструктор C++
C++ Когда в классе нужен копирующий конструктор?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
22.05.2010, 23:07     копирующий конструктор и иерархия #8
Нет, не совсем так. В конструкторе надо использовать инициализаторы, а конструктор по умолчанию надо оставлять только тогда, когда он для чего-то необходим.
C++
1
2
3
4
5
6
7
8
9
10
class father {
    std::string name;
    int numb;
public:
    father(const std::string &str, int num): name(str), numb(num)  // Конструктор, собирающий объект из разрозненных значений
    {}
 
    father(const father& src): name(src.name), numb(src.numb)   // Конструктор копирования
    {}
};
Yandex
Объявления
22.05.2010, 23:07     копирующий конструктор и иерархия
Ответ Создать тему
Опции темы

Текущее время: 00:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru