![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 05.10.2011
Сообщений: 7
|
![]()
Здравствуйте.
Допустим, есть конструкция вроде следующей (сразу извиняюсь за возможные синтаксические ошибки, так как пишу прямо здесь - да и не в них соль): class base { int* massiv; int var1, var2; public: //здесь описываются конструкторы и методы доступа к переменным }; class A : public base { int varA; public: //опять же конструкторы, методы доступа и прочие функции }; class B : public base { int varB; public: /////////////////////// }; int main() { base* X = new A; base* Y = new B;' ???????????????? return 0; } А вот на месте вопросов я хотел бы произвести копирование переменных, которые относятся к базовому классу, то есть var1, var2 и указатель massiv, из X в Y. Понятно, что можно при помощи методов доступа все их последовательно скопировать, но хотелось бы узнать, нет ли метода пооригинальнее и покрасивее. Заранее спасибо. |
![]() |
![]() |
![]() |
#2 |
C++,DirectX/OpenGL
Форумчанин
Регистрация: 09.01.2011
Сообщений: 422
|
![]()
Через дружественную функцию можно получать доступ к закрытым полям класса.
|
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 01.07.2011
Сообщений: 423
|
![]()
Так как ваши указатели X и Y имеют статический тип base, то вы просто можете присвоить один объект другому, то есть
Код:
Со мной можно встретиться на www.clipper.borda.ru
|
![]() |
![]() |
![]() |
#4 |
Регистрация: 05.10.2011
Сообщений: 7
|
![]()
спасибо, а то я пытался сделать
X = Y Все компилировалось, но при выполнении ошибка. Потом пытлся извращаться с использованием конструктора-копировщика. Громоздко получилось. |
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 01.07.2011
Сообщений: 423
|
![]()
Только имейте в виду, что у вас скопируется только значение указателя, а не сами объекты, лежащие в памяти по значению адреса, хранящемся в этом указателе.
Со мной можно встретиться на www.clipper.borda.ru
|
![]() |
![]() |
![]() |
#6 | |
Регистрация: 05.10.2011
Сообщений: 7
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 01.07.2011
Сообщений: 423
|
![]()
Вам не обязательно через указатели на базовый класс делать присваивание одного объекта другому. Можно это делать и используя сами объекты.
Например, Код:
Со мной можно встретиться на www.clipper.borda.ru
|
![]() |
![]() |
![]() |
#8 |
Регистрация: 05.10.2011
Сообщений: 7
|
![]()
я на своем пути изучения С++ и одновременного написания программы столкнулся с еще одной проблемой:
Если вернуться чуть наверх к строке base* X = new A; как мне получить доступ к методам класса А через созданный указатель X? Чисто виртуальные функции использовать не хочу, так как от класса base наследуется еще и класс B, обладающий функциями другой направленности. Соответственно базовый класс определениями чисто виртуальных функций перегружать не хочу, да и неизвестно как определять такие функции предназначенные для класса A в классе B. Что делать? |
![]() |
![]() |
![]() |
#9 | |
C++,DirectX/OpenGL
Форумчанин
Регистрация: 09.01.2011
Сообщений: 422
|
![]() Цитата:
При использовании виртуальных функций это никаких проблем не вызовет. Функции будут вызываться по фактическому типу объекта, а не по типу указателя. |
|
![]() |
![]() |
![]() |
#10 | |
Регистрация: 05.10.2011
Сообщений: 7
|
![]() Цитата:
void ReadPort(int port) а классу B - выводить в файл, соответственно нужна функция void WriteFile(const char* filename) Дилемма... |
|
![]() |
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Нужно дописать программу, примерно 90% сделано, осталось чуть чуть | Xerxes | Фриланс | 2 | 31.01.2011 23:27 |
График функции на паскале, чуть-чуть поправить | momentow | Помощь студентам | 1 | 28.12.2010 01:28 |
программа часы,надо чуть-чуть переделать | RadioDream | Помощь студентам | 1 | 21.10.2010 19:29 |
нашел поиском нужный макрос, чуть чуть бы доработать | zander | Microsoft Office Excel | 3 | 30.09.2009 12:19 |