Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 21.08.2017
Сообщений: 1
1

Указатели и наследование С++

21.08.2017, 17:57. Показов 2199. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Помогите, пожалуйста, с указателями.

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
void funcFirst(int *t)
{
//тут t будет как копия массива b
//на что в теле функции будет указывать *t и **t и t?
}
 
 
void funcSecond(int **t)
{
//тут t будет как указатель на массив b
//на что в теле функции будет указывать *t и **t и t и ***t?
}
 
int main()
{
 
int a=5;
cout<<*a; //указатель на место в памяти где хранится а
 
int *b= new int[3];
b[0]=7;
 
funcFirst(b);
fundSecond(b);
 
cout<<*b <<b<<**b; // Вывод:число 7,  адрес на b, ошибка
 
int **arr;
arr=new int[5];
for(size_t i=0; i<5; i++)
{
arr[i]=new int[5];
arr[i][0]=i;
}
 
cout<<arr <<*arr<<**arr<<***arr;//Вывод: адрес где лежит весь массив,
//адрес где лежит массив который находится в arr[0],
//0 ->число которое находится в arr[0][0] т.е. первый элемент
//ошибка
 
return 0;
}
Насколько я знаю, * и & это операторы взятия адреса. Разница лишь в том что & нельзя инициализировать после объявления, нужно это сразу делать, как только объявил. Т.е. Если бы заменил везде тут * на & (кроме мест где я объявляю массивы) то все было бы точно так же? Есть ли разница между объявлением int *arr и int arr* ? Все ли я правильно понял и описал?

Относительно наследования. Сегодня наткнулся на вопрос, каким бывает наследование в С++.. О чем тут идет речь? Бывает виртуальное и обычное? или тут говориться о спецификаторах private, public, protected при наследовании(class a: public b || class a: private d etc)??
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.08.2017, 17:57
Ответы с готовыми решениями:

наследование и указатели
Решается проблема как-нибудь? #include &lt;set&gt; class PARENT{}; class CHILD : public PARENT{};...

Написать код используя массивы, указатели, виртуальные функции, наследование, классы и т.д
Короче нужно сделать код, программу которая будет использовать массивы, указатели, виртуальные...

указатели и наследование
Есть классы time и oldtime, причем класс time является производным по отношению к классу oldtime,...

Создать сложный класс, используя наследование (указатели, конструкторы и деструкторы)
Создать сложный класс из реальной жизни, используя наследование. В каждом вложенном классе должны...

10
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
21.08.2017, 18:22 2
Цитата Сообщение от betaTest Посмотреть сообщение
//тут t будет как копия массива b
Массивов тут нет, только указатели. Значение указателя t - адрес начала выделенной, через new, памяти.

Добавлено через 1 минуту
Цитата Сообщение от betaTest Посмотреть сообщение
//на что в теле функции будет указывать *t и **t и t?
*t - первый элемент в выделенной памяти, всё равно что t[0].

Добавлено через 2 минуты
Цитата Сообщение от betaTest Посмотреть сообщение
C++
1
2
int a=5; 
cout<<*a; //указатель на место в памяти где хранится а
Если адрес переменной a, то:
C++
1
cout << &a;
0
875 / 461 / 91
Регистрация: 10.06.2014
Сообщений: 2,669
21.08.2017, 18:22 3
Лучший ответ Сообщение было отмечено betaTest как решение

Решение

В первую функцию будет передана копия указателя на первый элемент массива. Никаких копий массива не будет.
Разыменование этого указателя вернёт значение первого элемента массива.
Двойное разыменование указателей запрещено (кроме тех случаев когда у нас есть указатель на указатель как во второй функции)


Во вторую функцию передаётся указатель на указатель.
Одно разыменование (*) даст доступ к указателю на первый элемент массива, двойное разыменование вернёт значение первого элемента массива. Тройное разыменование, то есть *** тут запрещено.

* - оператор разыменования указателя
& - зависит от контекста. где то это оператор взятия адреса, а в некоторых случаях может быть ссылкой. Те случаи когда требуется определение сразу при объявлении, это тот случай когда & играет роль ссылки.

Каким бывает наследование? Помоему вопрос неоднозначный.
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
21.08.2017, 18:36 4
Лучший ответ Сообщение было отмечено betaTest как решение

Решение

Цитата Сообщение от betaTest Посмотреть сообщение
Все ли я правильно понял и описал?
Нет.

Добавлено через 4 минуты
Цитата Сообщение от nd2 Посмотреть сообщение
Если адрес переменной a, то:
C++
1
cout << &a;
Если значение переменной через её адрес, то:
C++
1
cout << *&a;
0
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
21.08.2017, 18:36 5
betaTest,
Цитата Сообщение от betaTest Посмотреть сообщение
Относительно наследования. Сегодня наткнулся на вопрос, каким бывает наследование в С++.. О чем тут идет речь? Бывает виртуальное и обычное? или тут говориться о спецификаторах private, public, protected при наследовании(class a: public b || class a: private d etc)??
Вы наверное что-то не правильно поняли. Наследование бывает обычное(не знаю как оно точно называется) и множественное. Больше никаких наследований я не слышал. Виртуальным может быть только метод в классе. Если метод в классе объявлен как виртуальный, это значит, что его можно переопределить в классе-наследнике и использовать в полиморфных вызовах.
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
21.08.2017, 18:42 6
Цитата Сообщение от Bretbas Посмотреть сообщение
Больше никаких наследований я не слышал.
...
Миниатюры
Указатели и наследование С++  
1
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
21.08.2017, 18:43 7
Цитата Сообщение от betaTest Посмотреть сообщение
Относительно наследования. Сегодня наткнулся на вопрос, каким бывает наследование в С++.. О чем тут идет речь? Бывает виртуальное и обычное? или тут говориться о спецификаторах private, public, protected при наследовании(class a: public b || class a: private d etc)??
В разных случаях речь может идти о разном.
0
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
21.08.2017, 18:45 8
nd2, Ого, это так называется. Я даже не знал
0
1550 / 875 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
21.08.2017, 22:10 9
Цитата Сообщение от Bretbas Посмотреть сообщение
Виртуальным может быть только метод в классе.
Вы б, хоть загуглили, прежде чем писать категоричные и при том ошибочные суждения. Даже на википедии есть статья на эту тему.
1
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
21.08.2017, 22:33 10
Цитата Сообщение от nd2 Посмотреть сообщение
Если значение переменной через её адрес, то:
C++
1
cout << *&a;
Или значение переменной через указатель:
C++
1
2
3
int a = 5;
int* pint = &a;
cout << *pint;
0
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
22.08.2017, 08:12 11
avgoor,
Цитата Сообщение от avgoor Посмотреть сообщение
Вы б, хоть загуглили, прежде чем писать категоричные и при том ошибочные суждения
Да, и еще наследование может быть виртуальным Хорошо что поправили. Я просто подзабыл немного, так как редко использую множественное наследование, а в частности проблем с множественным наследованием, в которых помогает виртуальное наследование, я пока не испытывал на себе
0
22.08.2017, 08:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.08.2017, 08:12
Помогаю со студенческими работами здесь

Указатели и указатели на указатели, а также типы данных
Недавно начал изучать Си, перешел с Delphi. Много непонятного и пока процесс идет медленно....

Через указатели на указатели посчитать сумму двух чисел и записать в третье
1. Через указатели на указатели посчитать сумму двух чисел и записать в третье. 2. Написать...

В matlab есть указатели на переменные или что-нибудь похожее на указатели?
Здравствуйте, в matlab есть указатели на переменные? или что-нибудь похожее на указатели? нужно...

Почему Лафоре использует указатели на указатели, вместо обмена значениями указателей?
Доброго времени суток! Задался теоретическим вопросом. Читал пример из книги Лафоре...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru