Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 21.05.2010
Сообщений: 8
1

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

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

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

т.е. программа как я понимаю будет типа
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 имени и это видимо решается с помощью копирующего конструктора. Напишите пожалуйста как именно, не или примерчик какой похожий, а то везде про копирующий конструктор один и тотже пример с массивом (
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.05.2010, 22:23
Ответы с готовыми решениями:

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

Копирующий конструктор
Здравствуйте, кто нибудь может сказать, почему при создании копирующего конструктора нужно...

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

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

7
Эксперт С++
1674 / 1046 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
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 виртуально наследуют от некоего класса, обеспечивающего хранение имени.
1
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)-это все копирующие конструкторы? т.е. в копирующем конструкторах просто ссылка на один и тотже обьект? Заранее благодорю ) в мануале такого нету почемуто (
0
Эксперт С++
1674 / 1046 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
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;
};
0
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() что я неправильно делаю?
И посоветуйте книгу пожалуйста по этой теме.
0
Эксперт С++
1674 / 1046 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
22.05.2010, 19:54 6
Ну что касается книги, то надо взять Страуструпа в обязательном порядке. Ну и ещё каких-нибудь спецов хороших. Например, Стенли Липпман.

А вот вопрос я что-то совершенно не понял. По отдельности слова знакомые, а в такой комбинации как-то не могу выделить из них смысл...
0
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();
};
З.Ы. Я так и знал что стоит сразу покупать Страуструпа, но почемуто купил справочники Шилдта (
0
Эксперт С++
1674 / 1046 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
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)   // Конструктор копирования
    {}
};
0
22.05.2010, 23:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.05.2010, 23:07
Помогаю со студенческими работами здесь

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

Закрытый копирующий конструктор
В данном упражнении описана методика, которая может помочь отказаться от копирующих конструкторов....

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

Когда в классе нужен копирующий конструктор?
Меня интересует вопрос когда в классе нужен копирующий конструктор.


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru