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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Rand - рандом не повторяющихся чисел http://www.cyberforum.ru/cpp-beginners/thread811443.html
Добрый вечер.Подскажите пожалуйста как сделать что бы рандомные числа не повторялись ? Понимаю что во внутрь надо положить цикл от 0 до i-1 если совпадет то повторять .. но не магу понять как реализовать. for ( i=0; i < c; i++) { B = 1 + rand()%11; // случайные числа от 1 до 11 printf("%d ",B ); }
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), определяющей конец вектора (начало вектора находится в точке с координатами 0, 0); конструктор для инициализации полей; функция для вычисления длины вектора, функция для печати полей и длины вектора. Создать производный класс «вектор в трехмерном...
Передача массивов и параметров с одной функции в другую C++
Здравствуйте. Я пишу программу, она состоит из множества функций. И у меня возникло море вопросов. Чур камнями не бросаться. 1)Как правильно определять выходные данные? их тоже надо прописывать в аргументах? 2)Я описала VectorArray, Gradient, tab как глобальные значения, потому что если их делать как локальные в main он выдает что ошибка, и они не определены, а они определяются уже далее в...
C++ Конструктор копии http://www.cyberforum.ru/cpp-beginners/thread811420.html
Конструктор копии вызывается при: 1)явном создании копии 2)при передачи параметров в функцию (по значению) 3)при возвращении объекта из функции напиши пожалуйста примеры
C++ Подскажите отладить запись в файл и считывание с него Я написал программу, она работает с использованием fprintf() и fscanf(), но задание сделать с fwrite() и fread() - вот с ними у меня выводит бред в файл тоже записывает бред.. #include <stdio.h> #include <locale.h> //Чтоб Visual понимал русские символы #include <string.h> #include <conio.h> struct SchoolBoys{ //Определение структуры char num; char name; int SchoolNumber; подробнее

Показать сообщение отдельно
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
18.03.2013, 02:35     Почему не стоит создавать массив объектов?
Вот так ты должен был написать:
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
class A
{
    public:
        virtual int f()=0;
};
 
class B: public A
{
    public:
        int f() {};
};
 
A *index(A* p,int i)
{
    return &p[i];
}
 
 
int main () {
 int Count= 10;
 B peet[Count];
 A* p=index(peet,2);
 p->f();
 return 0;
}
Учитывая, что код демонстрационный, он вполне себе нормален. Какие всего этого последствия? Ну-во первых у тебя на данный момент занята память под Count элементов типа B. Оно тебе надо? В то время как по факту нужен всего один элемент- второй. Поэтому делаем так:

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
#include <stdio.h>
 
class A
{
    public:
        virtual int f()=0;
};
 
class B: public A
{
    public:
        int f() {};
};
 
A *index(A** p,int i)
{
    return p[i];
}
 
 
int main () {
 
 int Count= 10;
 
 //Вот массив указателей
 B* peet[Count];
 A* p=index((A**)peet,2);
 
 
 //Теперь p должен указывать на элемент типа B, но этого элемента нет!
 //мы ведь не создали ни один элемент типа B, мы создали только указатели на них!
 //исправим это положение, создадим такой элемент
 p= new B;
 
 //И вызываем функцию
 p->f();
 return 0;
}
то есть сейчас строчкой B* peet[Count]; я создаю массив указателей, а он по определению не может быть больше массива элементов, а может быть меньше. То есть экономится память и время на конструирование. Ведь в дальнейшем я создаю всё-таки один элемент строчкой p= new B; но это ведь не 10!

Цитата Сообщение от dovskr Посмотреть сообщение
Можете пояснить подробно что тут такого происходит когда в функцию передаётся указатель на массив объектов
Ничё особенного не происходит-то. В функцию index передаёдся адрес нулевого объекта массива beep и этото же адрес и возвращается. А ты что думал?
 
Текущее время: 11:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru