Форум программистов, компьютерный форум CyberForum.ru

Вопросы начинающего - C++

Восстановить пароль Регистрация
 
hepr
 Аватар для hepr
60 / 32 / 5
Регистрация: 21.10.2010
Сообщений: 538
21.10.2010, 16:34     Вопросы начинающего #1
Здравствуйте в С++ я еще новичок, поэтому, если позволите то я задам несколько вопросов
-class A: public B
По-смыслу это значит что класс А должен унаследовать все pubic методы класса B, я прав?
- Как создать дву(и более)мерный массив
Предположу что массивы могут быть только одно и двумерные(максимум 3-мерные) из-за того что например непонятна структура 4 мерного массива
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.10.2010, 16:34     Вопросы начинающего
Посмотрите здесь:

Работа с графикой начинающего C++
C++ вопрос от начинающего програмиста :)
C++ Вопросы начинающего
Вопрос начинающего C++
C++ 3D программирование для начинающего
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
21.10.2010, 19:21     Вопросы начинающего #2
hepr, 1. Нет. Это открытое наследование. Паблик и протектед наследует. Доступ к приват элементам - закрыт.

2. Четырехмерный массив.
int Arr[n][n][n][n];
Но как с ним работать - другой вопрос. Такого лучше избегать.
Двумерный соответственно либо:
int Arr[n][n];
либо
int** Arr;

+ Любой массив n-мерной размерности можно представить в виде одномерного.
hepr
 Аватар для hepr
60 / 32 / 5
Регистрация: 21.10.2010
Сообщений: 538
21.10.2010, 22:58  [ТС]     Вопросы начинающего #3
1)Но насколько я знаю privatre члены класса вообще никогда не наследуются
2)А чем такое наследование отличается от A:B
3)А какие еще есть виды наследования и чем они отличаются
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
21.10.2010, 23:52     Вопросы начинающего #4
hepr, 2) A:B - как раз приватное наследование.
3) Соответственно открытое, закрытое и защищенное
Mr.X
Эксперт С++
 Аватар для Mr.X
2803 / 1579 / 247
Регистрация: 03.05.2010
Сообщений: 3,667
22.10.2010, 00:40     Вопросы начинающего #5
Цитата Сообщение от hepr Посмотреть сообщение
1)Но насколько я знаю privatre члены класса вообще никогда не наследуются
2)А чем такое наследование отличается от A:B
3)А какие еще есть виды наследования и чем они отличаются
При любом виде наследования наследуется всё кроме конструкторов, деструктора и оператора копирующего присваивания.
Открытое наследование реализует отношение "является разновидностью", а закрытое - "реализуется посредством", но это отношение рекомендуется реализовывать вложением, т.е. делать объект одного класса членом другого. Защищенное наследование по-моему вообще не применяется.
IchMors
96 / 92 / 4
Регистрация: 16.05.2010
Сообщений: 307
22.10.2010, 01:10     Вопросы начинающего #6
а разве при открытом наследовании в том числе не наследуются private элементы? О_о по моему не наследуются только protected, ну и соответственно конструкторы/деструкторы и тд.
hepr
 Аватар для hepr
60 / 32 / 5
Регистрация: 21.10.2010
Сообщений: 538
22.10.2010, 10:23  [ТС]     Вопросы начинающего #7
Нет вы не правы, privete тем и отличаются от protected что наследуются
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
22.10.2010, 11:00     Вопросы начинающего #8
Цитата Сообщение от hepr Посмотреть сообщение
По-смыслу это значит что класс А должен унаследовать все pubic методы класса B, я прав?
Нет. Если через двоеточие указан B, то наследуются все го члены, не зависимо от спецификаторов видимости. Но если не указать public, то public члены B в A становятся protected, а если указать, то они остаются public. Причём, private члены, хоть и наследуются, но методы класса A не имеют к ним прямого доступа, только через protected и public методы класса B.

Добавлено через 1 минуту
Цитата Сообщение от hepr Посмотреть сообщение
Нет вы не правы, privete тем и отличаются от protected что наследуются
Не этим. protected не только наследуется, но и открыт для потомков, а private закрыт, но данные с этим спецификатором тоже наследуются и под них в объектах, чей тип - потомок, отводится память, только защищённая.

Добавлено через 10 минут
Цитата Сообщение от hepr Посмотреть сообщение
Как создать дву(и более)мерный массив
Никак. Но можно создать массив массивов. На языках, поддерживающих многомерность, многомерный массив и массив массивов - синонимы:
Pascal
1
2
3
4
5
6
var a:array[1..100,1..100] of real; // двумерный массив
v:array[1..100] of real; // Одномерный массив
begin
a[1]:=b; // Элемент a[1] массива a адресуется как элемент-массив одномерного массива. Допустимо с точки зрения паскаля.
a[2][2]:=3; // Элемент a[2] массива a адресуется как элемент-массив одномерного массива, а его элемент a[2][2] адресуется как элемент типа real одномерного массива. Допустимо с точки зрения паскаля.
a[3,3]:=4; // Элемент a[3,3] массива a адресуется как элемент типа real двумерного массива. Допустимо с точки зрения паскаля.
. Обрати внимание, что так адресуется один и тот же массив. На сях же такой синонимичногсти нет, поэтому:
C++
1
2
3
float a[100][100];
a[1][1]=1; // Допустимо
a[2,2]=2; // Не допустимо
C
1
2
3
float a[100][100];
a[1][1]=1; // Допустимо
a[2,2]=2; // Не допустимо
C#
1
2
3
float a[100][100];
a[1][1]=1; // Допустимо
a[2,2]=2; // Не допустимо
.

Добавлено через 3 минуты
Цитата Сообщение от hepr Посмотреть сообщение
Предположу что массивы могут быть только одно и двумерные(максимум 3-мерные) из-за того что например непонятна структура 4 мерного массива
Понятна. На бейсике я начал массивы сразу с шестимерных и никаких сложностей это не вызывало.

Добавлено через 3 минуты
Цитата Сообщение от Lavroff Посмотреть сообщение
Такого лучше избегать.
Я плохо себе представляю области возможного применения массивов с размерностями 1, 3 и 4, а для двумерных знаю только одно применение - матрицы коэффициентов систем уравнений. А начиная с пяти - нормально.

Добавлено через 4 минуты
Цитата Сообщение от IchMors Посмотреть сообщение
ну и соответственно конструкторы/деструкторы и тд.
А как тогда вообще наследовать при наличии private?

Добавлено через 57 секунд
Цитата Сообщение от Lavroff Посмотреть сообщение
+ Любой массив n-мерной размерности можно представить в виде одномерного
массива массивов размерности n-1. Причём, на любом языке, поддерживающем массивы.
hepr
 Аватар для hepr
60 / 32 / 5
Регистрация: 21.10.2010
Сообщений: 538
22.10.2010, 11:01  [ТС]     Вопросы начинающего #9
Еще пару вопросов если позволите:
Как сделать указатель
- A* B
Объявляю указатель B на A
Как сделать ссылку
A& B
Аналогично
Я прав?
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
22.10.2010, 11:14     Вопросы начинающего #10
Цитата Сообщение от hepr Посмотреть сообщение
Еще пару вопросов если позволите:
Как сделать указатель
- A* B
Объявляю указатель B на A
Как сделать ссылку
A& B
Аналогично
Я прав?
Да. Только не по всех случаях уместны пустые ссылки, как ты здесь объявил. Объявлять прямо так имеет смысл только ссылку-параметр функции. А в остальных случаях
C++
1
2
A a;
A &b=a;
, причём, смысла и в этом маловато, так как адрес ссылки можно менять только один раз и только если она объявлена как пустая, но параметром не является.

Добавлено через 7 минут
Цитата Сообщение от taras atavin Посмотреть сообщение
На сях же такой синонимичногсти нет
Кстати, это мелочь, так как разница всего лишь в синтаксисе адресации элементов, а не в семанитике. Поэтому я сам часто зову сёвый массив массивов двумернным.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.10.2010, 13:29     Вопросы начинающего
Еще ссылки по теме:

C++ C++ для начинающего!
Opengl и С++ для начинающего C++
Указатели для начинающего C++

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

Или воспользуйтесь поиском по форуму:
Mr.X
Эксперт С++
 Аватар для Mr.X
2803 / 1579 / 247
Регистрация: 03.05.2010
Сообщений: 3,667
22.10.2010, 13:29     Вопросы начинающего #11
Цитата Сообщение от taras atavin Посмотреть сообщение
...Но если не указать public, то public члены B в A становятся protected, а если указать, то они остаются public.
Если не указывать в наследовании public, то по умолчанию там будет private, что означает, что все унаследованные члены базового класса станут private.
Yandex
Объявления
22.10.2010, 13:29     Вопросы начинающего
Ответ Создать тему
Опции темы

Текущее время: 14:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru