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

Как записать два разных класса в массив? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вычислить значения функции на заданном промежутке с заданным шагом http://www.cyberforum.ru/cpp-beginners/thread1494261.html
написать программу вычисления функции на заданном промежутке с шагом 0.2 и построить график этой функции. у={e}^{(-(x+3))} при x>3.61 y=1 при 0\leq x\leq 3.61 y=0.5x при x<0 #include <iostream> #include<iostream.h> #include<conio.h> #include <cmath> using std::cout;
C++ Вычислить сумму конечного ряда написать программу вычисления суммы конечного ряда. значения x и n вводятся с клавиатуры \sum_{k=1}^{n}((-1)^k*(x+3))/k! http://www.cyberforum.ru/cpp-beginners/thread1494255.html
C++ MS Visual Studio 2013 Express при компиляции программа открывается и сразу закрывается
Вот код: #include <iostream> int main() { std::cout << "Hello" << ; system("pause"); return 0; }
Dll. Создание и использование C++
Добрый вечер! Не порекомендуете хорошей литературы по созданию и использованию dll библиотек в Windows?
C++ функции в С++ http://www.cyberforum.ru/cpp-beginners/thread1494217.html
#include <iostream> #include <cmath> #include <iomanip> using namespace std; void Vvod(int* arrA,int n) { for(int i=0;i<n;i++) { cout<<"arrA= ";
C++ Ошибка при резервировании памяти для своего(!) вектора Всем здравствуйте! Возможно, из названия темы не совсем понятен вопрос, поэтому уточню саму суть: Пишу свой шаблонный класс вектора и столкнулся со странной проблемой: при вызове функции reserve, которая, если верить описанию, должна увеличить емкость вектора, если текущая емкость меньше заданной, происходит ошибка времени компиляции (если я правильно классифицировал ошибку). Вот сама... подробнее

Показать сообщение отдельно
hoggy
6408 / 2626 / 457
Регистрация: 15.11.2014
Сообщений: 5,796
Завершенные тесты: 1
07.07.2015, 19:43     Как записать два разных класса в массив?
Цитата Сообщение от Croessmah Посмотреть сообщение
в данном случае как-то слишком сильно...
я врать не буду, но вроде бы он полностью совместим с с99.

Цитата Сообщение от ValeryS Посмотреть сообщение
например абстрактный класс
плохой пример.

вы хотя б иногда, прежде чем писать попробуйте хотя б проверить:
скомпилять, да посмотреть.

его размер принципиально не может быть меньше, чем sizeof(void*).
догадайтесь, почему.

Цитата Сообщение от ValeryS Посмотреть сообщение
это я такк примеру назвал 100 байт, а ежли в самом большом десятки и сотни килобайт а в маленьком один два байта? сколько памяти зазря утечет?
а это от программиста зависит.
ежели он диструктор напишит,
стало быть ничего не утечет.

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


Цитата Сообщение от ValeryS Посмотреть сообщение
чтобы не было такой бяки
я сначала никак в толк взять не мог:
накой такое вообще может быть нужным?

а потом мне один хороший человек объяснил,

что это такая киллер-фича сишная:
структуры переменной длины.


C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
struct Data
{
    size_t size;
    char data[0];
};
 
Data* create(const size_t size)
{
    Data* data = static_cast<Data*>(malloc(sizeof(Data) + size));
    data->size = size;
    return data;
}
 
void use(Data* data)
{
    for(size_t i = 0; i < data->size; ++i)
        data->data[i] = 123;
}
а вот почти тоже самое на плюсиках:

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
43
44
#include <iostream>
#include <cstring>
#include <cstdlib>
 
struct Response
{
    Response(int code, char const * str)
        : code_(code)
    { std::memcpy(data_, str, size_); }
 
    char * data()            { return data_;              }
    char const * data()const { return data_;              }
    size_t size() const      { return size_;              }
    size_t length() const    { return std::strlen(data_); }
    int code() const         { return code_;              }
 
    void* operator new(size_t size, size_t length)
    {
        Response * ptr = (Response*)std::malloc(size + sizeof(char) * length);
        if(ptr)
            ptr->size_ = length + 1;
        
        return ptr;
    }
    void operator delete(void* ptr) { std::free(ptr); }
 
private:
    int const code_;
    size_t    size_;
    char      data_[1];
};
 
int main()
{
    const char ptr[] = "privet mir";
 
    Response * resp = new(std::strlen(ptr)) Response(1, ptr);
 
    std::cout << resp->code()   << std::endl;
    std::cout << resp->data()   << std::endl;
    std::cout << resp->size()   << std::endl;
    std::cout << resp->length() << std::endl;
    delete resp;
}
как гриццо, каждый мопед под свою задачу.
кому то массивы-зоопарки.
а кому структуры динамических размеров.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru