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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 5.00
Alilidor
0 / 0 / 0
Регистрация: 21.05.2010
Сообщений: 8
#1

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

21.05.2010, 22:23. Просмотров 1913. Ответов 7
Метки нет (Все метки)

Создать иерархию типов, описывающую - студента, отца семейства и студента-отца семейства. Классы должны конструкторы, включая конструктор копирования, виртуальные деструкторы, перегруженные функции вывода в поток и ввода в поток.

т.е. программа как я понимаю будет типа
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 имени и это видимо решается с помощью копирующего конструктора. Напишите пожалуйста как именно, не или примерчик какой похожий, а то везде про копирующий конструктор один и тотже пример с массивом (
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.05.2010, 22:23     копирующий конструктор и иерархия
Посмотрите здесь:

Копирующий конструктор - C++
Добрый вечер всем! Следущая проблема - решила создать свой персональный vector - int_array. Но возникла проблема... Не пойму, как...

Копирующий конструктор - C++
Здравствуйте, кто нибудь может сказать, почему при создании копирующего конструктора нужно указывать ссылку на объект? #include...

копирующий конструктор !!! - C++
Вот это верный вид конструктора копирования??? class VK{ int b; public: VK(const VC &); } VL::VK(const VK & tmp){ b=tmp.b; ...

Копирующий конструктор - C++
Помогите пожалуйста реализовать копирующий конструктор, у меня он выдает нули =\ Вот код: #include <iostream> #include...

Копирующий конструктор - C++
#include<iostream> #include<fstream> #include<sstream> #include<cmath> #include<cstdlib> #include<string> #include<limits> ...

Закрытый копирующий конструктор - C++
В данном упражнении описана методика, которая может помочь отказаться от копирующих конструкторов. Создайте класс Х и объявите (но не...

Копирующий конструктор абстрактного класа - C++
Добрый вечер. Сразу к делу. Есть абстрактный класс: class Product abstract { protected: int lipids; string brand; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nick Alte
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,930
Завершенные тесты: 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
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,930
Завершенные тесты: 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
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,930
Завершенные тесты: 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++
Добрый день. Сегодня обнаружил кое-что для себя странное и непонятное. В общем-то смотрим код: #include <iostream> ...

Копирующий конструктор класса, содержащего переменную-член указатель - C++
Практикуюсь по книге Стенли Липпмана "Язык программирования C++ вводный курс" 4 изд. Упражнение 13.4. Используя приведенный ниже набросок...

Иерархия С++ - C++
Привет. Заинтересовал вопрос иерархии С++: код -> функции -> классы/структуры -> ?? подозреваю что дальше идут массивы классов, в...

иерархия классов - C++
подскажите как написать иерархию классов описывающих элементы графического интерфейса(окна,кнопки,поля ввода,метки,списки) и если можно...


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

Или воспользуйтесь поиском по форуму:
Nick Alte
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,930
Завершенные тесты: 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     копирующий конструктор и иерархия
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru