|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
14.10.2011, 20:01 | #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. Понятно, что можно при помощи методов доступа все их последовательно скопировать, но хотелось бы узнать, нет ли метода пооригинальнее и покрасивее. Заранее спасибо. |
14.10.2011, 20:25 | #2 |
C++,DirectX/OpenGL
Форумчанин
Регистрация: 09.01.2011
Сообщений: 422
|
Через дружественную функцию можно получать доступ к закрытым полям класса.
|
14.10.2011, 20:31 | #3 |
Форумчанин
Регистрация: 01.07.2011
Сообщений: 423
|
Так как ваши указатели X и Y имеют статический тип base, то вы просто можете присвоить один объект другому, то есть
Код:
Со мной можно встретиться на www.clipper.borda.ru
|
14.10.2011, 21:03 | #4 |
Регистрация: 05.10.2011
Сообщений: 7
|
спасибо, а то я пытался сделать
X = Y Все компилировалось, но при выполнении ошибка. Потом пытлся извращаться с использованием конструктора-копировщика. Громоздко получилось. |
14.10.2011, 21:31 | #5 |
Форумчанин
Регистрация: 01.07.2011
Сообщений: 423
|
Только имейте в виду, что у вас скопируется только значение указателя, а не сами объекты, лежащие в памяти по значению адреса, хранящемся в этом указателе.
Со мной можно встретиться на www.clipper.borda.ru
|
15.10.2011, 16:45 | #6 | |
Регистрация: 05.10.2011
Сообщений: 7
|
Цитата:
|
|
15.10.2011, 20:07 | #7 |
Форумчанин
Регистрация: 01.07.2011
Сообщений: 423
|
Вам не обязательно через указатели на базовый класс делать присваивание одного объекта другому. Можно это делать и используя сами объекты.
Например, Код:
Со мной можно встретиться на www.clipper.borda.ru
|
17.10.2011, 15:00 | #8 |
Регистрация: 05.10.2011
Сообщений: 7
|
я на своем пути изучения С++ и одновременного написания программы столкнулся с еще одной проблемой:
Если вернуться чуть наверх к строке base* X = new A; как мне получить доступ к методам класса А через созданный указатель X? Чисто виртуальные функции использовать не хочу, так как от класса base наследуется еще и класс B, обладающий функциями другой направленности. Соответственно базовый класс определениями чисто виртуальных функций перегружать не хочу, да и неизвестно как определять такие функции предназначенные для класса A в классе B. Что делать? |
17.10.2011, 15:28 | #9 | |
C++,DirectX/OpenGL
Форумчанин
Регистрация: 09.01.2011
Сообщений: 422
|
Цитата:
При использовании виртуальных функций это никаких проблем не вызовет. Функции будут вызываться по фактическому типу объекта, а не по типу указателя. |
|
17.10.2011, 16:24 | #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 |