Форум программистов, компьютерный форум, киберфорум
Наши страницы

Почему не стоит создавать массив объектов? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Rand - рандом не повторяющихся чисел http://www.cyberforum.ru/cpp-beginners/thread811443.html
Добрый вечер.Подскажите пожалуйста как сделать что бы рандомные числа не повторялись ? Понимаю что во внутрь надо положить цикл от 0 до i-1 если совпадет то повторять .. но не магу понять как...
C++ Не получается суммировать ангары При сумме ангаров он только складывает сумму последних ангаров #include "stdafx.h" #include <iostream> #include <conio.h> #include <locale.h> using namespace std; class Angar http://www.cyberforum.ru/cpp-beginners/thread811435.html
Наследование классов. Длина вектора на плоскости и в трехмерном пространстве C++
Условие задачи: Создать базовый класс «вектор на плоскости». Элементы класса: поля, задающие координаты точки (статус доступа protected), определяющей конец вектора (начало вектора находится в...
Передача массивов и параметров с одной функции в другую C++
Здравствуйте. Я пишу программу, она состоит из множества функций. И у меня возникло море вопросов. Чур камнями не бросаться. 1)Как правильно определять выходные данные? их тоже надо прописывать в...
C++ Конструктор копии http://www.cyberforum.ru/cpp-beginners/thread811420.html
Конструктор копии вызывается при: 1)явном создании копии 2)при передачи параметров в функцию (по значению) 3)при возвращении объекта из функции напиши пожалуйста примеры
C++ Подскажите отладить запись в файл и считывание с него Я написал программу, она работает с использованием fprintf() и fscanf(), но задание сделать с fwrite() и fread() - вот с ними у меня выводит бред в файл тоже записывает бред.. #include <stdio.h>... подробнее

Показать сообщение отдельно
DU
1484 / 1130 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
18.03.2013, 01:51
подробности есть в книге
Наиболее эффективное использование C++. 35 новых рекомендаций по улучшению ваших программ и проектов
Автор: Скотт Мейерс
Правило 3. Никогда не используйте полиморфизм в массивах
http://rsdn.ru/res/book/cpp/most_effective_cpp.xml

Связано с глюками, которые возникнуть при арифметики с указателями.
Доступ по индексу - это один из таких случаев.
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
struct Base
{
   char ch;
};
 
struct Der : public Base
{
    char ch2;
};
 
//В плюсах указатель на Der преобразуется в указатель на Base;
//В нашем случае размер объектов типа Base меньше объектов типа Der.
//Создаем массив Der;
Der derArr[10];
 
// Получаем указатель на первый элемент, преобразованный к указателю на Base
Base* baseArrPtr = derArr;
 
// Теперь пытаемся изменить значение символа второго элемента массива:
baseArrPtr[1].ch = 'c';
 
//baseArrPtr[1].ch = 'c'; эквивалентно следующему:
Base* ptr = (baseArrPtr + 1);
ptr->ch = 'c';
 
//При арифметике с указателями они наращиваются в зависимости от размера
//объекта, а размер определяется типом указателя. В нашем случае это указатель
//на Base. Но размер Base меньше чем размер Der.
//это значит, что указатель ptr будет указывать не на второй элемент исходного массива
//производных объектов Der, а куда-то в середину первого объекта этого массива. А
//это ошибка.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru