С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
 Аватар для murtukov
10 / 10 / 5
Регистрация: 30.01.2013
Сообщений: 99

О конструкторе копирования

25.09.2013, 16:02. Показов 1160. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток всем присутствующим.
Интересует маленький вопрос. В 15-й строке происходит прямое обращение к полю входного объекта (a.data), хотя оно объявлено как private. Вопрос: почему это возможно? Потому-что оба объекты одного класса? Если да, то как сделать так, чтобы разные объекты не имели доступа в полям друг друга?

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
#include <iostream>
using namespace std;
///////////////////////////////////////////////////////////
class alpha
{
private:
    int data;
public:
    alpha() // 
    { }
    alpha(int d) // конструктор с одним аргументом
    { data = d; }
    alpha(alpha& a) // конструктор копирования
    {
    data = a.data;
    cout << "\nЗапущен конструктор копирования";
    }
    void display() // display
    { cout << data; }
    void operator=(alpha& a) // overloaded = operator
    {
    data = a.data;
    cout << "\nЗапущен оператор присваивания";
    }
};
///////////////////////////////////////////////////////////
int main()
{
    alpha a1(37);
    alpha a2;
    a2 = a1; // запуск перегружаемого =
    cout << "\na2 ="; a2.display(); // вывести a2
    alpha a3(a1); // запуск конструктора копирования
// alpha a3 = a1; // эквивалентное определение a3
    cout << "\na3 ="; a3.display(); // вывести a3
    cout << endl;
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.09.2013, 16:02
Ответы с готовыми решениями:

Параметр в конструкторе копирования
Есть класс class CMatrix{ valarray&lt;valarray&lt;double&gt; &gt; matrix; public: CMatrix(const CMatrix &amp;M); ..... }; ...

Ошибка в конструкторе копирования C++
Помогите, пожалуйста создать конструктор копирования, который будет копировать элемент и добавлять его в список. У меня получился такой...

Указатель this в конструкторе копирования
Добрый всем вечер. Подскажите пожалуйста, как правильно применить в конструкторе копирования указатель this? Вот есть код. ...

11
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
25.09.2013, 16:13
Цитата Сообщение от murtukov Посмотреть сообщение
Если да, то как сделать так, чтобы разные объекты не имели доступа в полям друг друга?
Да. А зачем такое понадобилось?
1
 Аватар для murtukov
10 / 10 / 5
Регистрация: 30.01.2013
Сообщений: 99
25.09.2013, 17:06  [ТС]
castaway,
Какая разница, зачем? В зависимости от моего ответа код будет различным?
0
138 / 130 / 59
Регистрация: 13.12.2012
Сообщений: 293
25.09.2013, 17:11
Потому что private видны классу, к которому они относятся и друзьям этого класса.
1
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
25.09.2013, 17:14
Цитата Сообщение от murtukov Посмотреть сообщение
Какая разница, зачем? В зависимости от моего ответа код будет различным?
Никакой. Мне просто было интересно зачем это может понадобится. А ответа в виде кода я не знаю, поэтому различных ответов не будет в любом случае.
0
 Аватар для murtukov
10 / 10 / 5
Регистрация: 30.01.2013
Сообщений: 99
25.09.2013, 17:54  [ТС]
В 24-й строке вылетает ошибка: no matching function for call to 'Person::Person(Person)'

Если вместо Person p = "Max" написать Person p("Max"), все начинает работать, хотя эти объявления эквиваленты (опираясь на информацию из книги Лафоре).

Вопрос: Почему не работает объявление Person p = "Max" ?

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
#include <iostream>
#include <cstring>
using namespace std;
///////////////////////////////////////////////////////////////////////////////
class Person
{
private:
    char *name;
public:
    Person(char const *n)
    {
        name = new char[strlen(n) + 1];
        strcpy(name, n);
    }
    Person(Person& n)
    {
        name = new char[strlen(n.name) + 1];
        strcpy(name, n.name);
    }
};
///////////////////////////////////////////////////////////////////////////////
int main()
{
    Person p = "Max";
 
    return 0;
}
0
 Аватар для KoGG
5637 / 1619 / 418
Регистрация: 23.12.2010
Сообщений: 2,428
Записей в блоге: 1
25.09.2013, 18:06
Потому, что может быть только
C++
1
2
Person p 
p.Person = "Max"
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
25.09.2013, 18:07
murtukov, 15 строку надо подправить:
C++
1
Person(const Person& n)
1
 Аватар для murtukov
10 / 10 / 5
Регистрация: 30.01.2013
Сообщений: 99
25.09.2013, 18:15  [ТС]
KoGG,

что за чушь, извините?
Цитата Сообщение от KoGG Посмотреть сообщение
p.Person = "Max"
Добавлено через 1 минуту
Tulosba,

А, все понял. Спасибо за дельный ответ.

Добавлено через 1 минуту
castaway,

Пока ни для чего не нужно, просто хочу знать на будущее. Вообще, знать нужно по возможности все)
0
25.09.2013, 18:20

Не по теме:

Цитата Сообщение от murtukov Посмотреть сообщение
Вообще, знать нужно по возможности все)
Ответ всё равно "42" :D

0
25.09.2013, 18:32

Не по теме:


Цитата Сообщение от Tulosba Посмотреть сообщение
Ответ всё равно "42"
Само собой ))) 52 :D

Цитата Сообщение от murtukov Посмотреть сообщение
хотя эти объявления эквиваленты (опираясь на информацию из книги Лафоре).
Не совсем. Когда столкнетесь с explicit - увидите сами :)

0
 Аватар для murtukov
10 / 10 / 5
Регистрация: 30.01.2013
Сообщений: 99
25.09.2013, 18:46  [ТС]
Tulosba,

"Автостопом по галактике" )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.09.2013, 18:46
Помогаю со студенческими работами здесь

Ошибка в конструкторе копирования
Всем привет, не могу понять проблему, у меня есть структура: struct WindowRender : public sf::RenderWindow, public Render; Мне...

Ошибка в конструкторе копирования
Здравствуйте. Есть один класс для работы с многочленами, который хранит элементы многочлена в списке. Так вот, в конструкторе копирования...

Ошибка в конструкторе копирования класса
Хотя и делал по образцу, но почему то лезет ошибка записи за пределы динамического массива, хотя и переменные копируются верно (отладчик...

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

Ссылка rvalue в конструкторе копирования и операторе присваивания
Здравствуйте. Решил попробовать ссылки rvalue в классе. Привожу часть: \\BinaryArray.h class BinaryArray { protected: ...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru