Форум программистов, компьютерный форум, киберфорум
Наши страницы

Конструктор копирования производных классов: для чего это нужно? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ как избавиться от округления float http://www.cyberforum.ru/cpp-beginners/thread1807896.html
#include <iostream> using std:: cin; using std:: cout; using std:: endl; int main() { cout << "123.008 + 0.0008 = " << 123.008 + 0.0008 << endl; // == 123.009, а нужно 123.0088 return...
C++ Программерский сленг: что означает "кастомный" и "кастить"? что есть "кастомный" и "кастить" ? http://www.cyberforum.ru/cpp-beginners/thread1807860.html
Объяснить, что происходит в заданном фрагменте кода (шифр Цезаря) C++
#include <iostream> #include <string> #include <conio.h> #include <stdlib.h> #include <sstream> #include <fstream> using namespace std; int main() {
Метод простых итераций и Зейделя в СЛАУ C++
имеется программа, которая 3-мя способами решает СЛАУ. а именно: матричный, крамер, Гаусс. Не могу понять саму суть метода простых итераций и Зейделя, нужно сделать их как 2 способа. помогите....
C++ Компилятор выдает странный ответ http://www.cyberforum.ru/cpp-beginners/thread1807792.html
#include <iostream> int main() { std::cout << "Введи 2 числа" << std::endl; int x = 0, y = 0; std::cin >> x >> y; std::cout << "Сумма " << x << " и " << y << " равна " << x +...
C++ Реальная затрачиваемая память в динамике Динамическое выделение памяти.. допустим есть: int *ivar=new int ; Поидее при выделении должно выделиться 255*4 байт памяти, однако при использовании delete программа заведомо знает данный размер... подробнее

Показать сообщение отдельно
Usagi
0 / 0 / 2
Регистрация: 03.07.2016
Сообщений: 18
Завершенные тесты: 2

Конструктор копирования производных классов: для чего это нужно? - C++

15.09.2016, 12:35. Просмотров 393. Ответов 6
Метки (Все метки)

Доброго времени суток!

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#ifndef EMP_H
#define EMP_H
#include <iostream>
#include <string>
 
class abstr_emp
{
private:
    std::string fname;
    std::string lname;
    std::string job;
public:
    abstr_emp();
    abstr_emp(const std::string& fn, const std::string& ln,
              const std::string& j);
    virtual void ShowAll() const;
    virtual void SetAll();
    friend std::ostream&
        operator<<(std::ostream& os, const abstr_emp& e);
 
    virtual ~abstr_emp() = 0;
};
class employee : public abstr_emp
{
public:
    employee();
    employee(const std::string & fn, const std::string & ln,
             const std::string& j);
    virtual void ShowAll() const;
    virtual void SetAll();
};
 
class manager : virtual public abstr_emp
{
private:
    int inchargeof;
protected:
    int InChargeOf() const { return inchargeof; }
    int & InChargeOf() { return inchargeof; }
public:
    manager();
    manager(const std::string& fn, const std::string& ln,
            const std::string& j, int ico = 0);
    manager(const abstr_emp & e, int ico);
    manager(const manager & m);
    virtual void ShowAll() const;
    virtual void SetAll();
};
 
class fink: virtual public abstr_emp
{
private:
    std::string reportsto;
protected:
    const std::string ReportsTo() const { return reportsto; }
    std::string & ReportsTo() {return reportsto; }
public:
    fink();
    fink(const std::string& fn, const std::string& ln,
         const std::string& j, const std::string& rpo);
    fink(const abstr_emp& e, const std::string& rpo);
    fink(const fink & e);
    virtual void ShowAll() const;
    virtual void SetAll();
};
 
class highfink : public manager, public fink
{
public:
    highfink();
    highfink(const std::string& fn, const std::string& ln,
             const std::string& j, const std::string& rpo,
             int ico);
    highfink(const abstr_emp& e, const std::string & rpo, int ico);
    highfink(const fink& f, int ico);
    highfink(const manager& m, const std::string& rpo);
    highfink(const highfink& h);
    virtual void ShowAll() const;
    virtual void SetAll();
};
 
#endif // EMP_H


В коде, приведённом выше, заинтересовали строки под номерами 45 и 62. Заголовочный файл класса взят из учебника С. Праты, глава 14, упр. 5.

Понятно, что определить их можно так
C++
1
2
manager::manager(const manager& m)
    : abstr_emp(m), inchargeof(m.inchargeof) { }
и так
C++
1
2
highfink::highfink(const highfink& h)
    : abstr_emp(h), manager(h), fink(h) { }
Но для чего это нужно? Ведь классу вполне достаточно неявных конструкторов копирования для почленного копирования.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru