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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
gek11
0 / 0 / 0
Регистрация: 03.10.2013
Сообщений: 27
#1

Как динамически выделить память для конструкторов класса? - C++

08.05.2014, 08:54. Просмотров 388. Ответов 5
Метки нет (Все метки)

подскажите как динамически выделить память для конструкторов класса?

C++
1
2
3
4
5
6
7
8
9
10
11
class circle
{
    double x,y,r;
public:
           void In();
       void Out();
       double Sc()const;
       circle();
circle(double myX,double myY,double myR);
circle(const circle&V);
...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.05.2014, 08:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как динамически выделить память для конструкторов класса? (C++):

Как выделить динамически память для данных класса - C++
Как выделить динамически память для данных класса ? class circle { double x,y,r; public:void In(); void Out(); ...

Как динамически выделить память для строкового массива? - C++
Собственно сам вопрос.

Можно ли динамически выделить память под массив указателей, на объекты класса? - C++
Прошу прощения если не правильно назвал вопрос. Не знаю как правильно сформулировать. Можно ли строчку VisualizationTools* VT; заменить...

Как выделить память для класса - C++
Привет, я пишу библиотеку управления памятью. На данный момент я выделяю память вот так void * __cdecl MyAlloc(size_t size) { void *...

Динамически выделить память под массив - C++
Задание было в следующем: дан вещественный двумерный массив А. Поменять местами максимальный элемент главной и побочной диагоналей с...

Динамически выделить память под массив - C++
Добрый день форусчани Как можно выделить память под массив объекта класса class Save_Colection { public: pk *field; ...

5
dimcoder
Полярный
466 / 438 / 68
Регистрация: 11.09.2011
Сообщений: 1,136
08.05.2014, 08:56 #2
Цитата Сообщение от gek11 Посмотреть сообщение
динамически выделить память для конструкторов класса?
Скажем так, конструктор класса - это функция, и выражение "динамическое выделение памяти" к ней не совсем уместно.
Если я Вас правильно понял, нужно выделить память динамически для элементов класса. Можно это сделать через указатель
C++
1
2
3
4
5
6
7
8
9
10
11
class Circle
{
     private:
          MyClass *myClass;
};
 
Circle::Circle():
     myClass(new myClass)
{
     ;
}
или
C++
1
2
3
4
5
6
7
8
9
10
class Circle
{
     private:
          MyClass *myClass;
};
 
Circle::Circle()
{
     myClass = new myClass;
}
0
gek11
0 / 0 / 0
Регистрация: 03.10.2013
Сообщений: 27
12.05.2014, 17:39  [ТС] #3
Все таки никак не могу разобраться :С
у меня есть программа, считающая количество(++) созданных переменных класса по трем конструкторам. Так же нужно сделать для деструктора, только -- каждое удаление. Но деструктору нужно, чтобы память для переменных была выделена динамически. Из вашего ответа я совсем ничего не понял,можете поподробнее объяснить ?
0
dimcoder
Полярный
466 / 438 / 68
Регистрация: 11.09.2011
Сообщений: 1,136
12.05.2014, 18:18 #4
Цитата Сообщение от gek11 Посмотреть сообщение
у меня есть программа
выкладывайте
Цитата Сообщение от gek11 Посмотреть сообщение
Так же нужно сделать для деструктора, только -- каждое удаление.
Так вы хотите подсчитать сколько переменных создается? static в помощь
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
45
#include <iostream>
 
using namespace std;
 
class MyClass
{
    public:
        MyClass()
        {
            count++;
            printCount();
        }
        
        ~MyClass()
        {
            count--;
            printCount();
        }
        
        static void printCount()
        {
            cout << "MyClass object count = " << count << endl;
        }
        
    private:
        static int count;
};
 
int MyClass::count = 0;
 
int main()
{
    cout << "Before allocating memory: " << endl;
    MyClass::printCount();
    
    cout << "Allocating memory for objects: " << endl;
    MyClass *myClassArray = new MyClass[10];
    
    cout << "Freeing memory: " << endl;
    delete [] myClassArray;
    
    cin.get();
    
    return 0;
}
На каждый объект вызывается конструктор и деструктор. И то и другое при вызове сообщают кол-во имеющихся/оставшихся объектов класса.
Если что-то непонятно, выкладывайте код который есть и добавьте конкретики в Ваш вопрос.
0
gek11
0 / 0 / 0
Регистрация: 03.10.2013
Сообщений: 27
12.05.2014, 19:46  [ТС] #5
C++
1
2
3
4
5
6
7
int circle::Kol=0;
int main()
{
cout<<circle::GetKol()<<endl;   //значение ноль
circle B(3,5,3);
cout<<circle::GetKol()<<endl;  //значение один
delete B; //(к примеру,соответственно значение будет опять ноль). Вот тут то проблема и возникает. Невозможно преобразовать circle в void.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class circle
{
    double x,y,r;
    static int Kol;
public:void In();
       void Out();
       double Sc()const;
       circle();
circle(double myX,double myY,double myR);
circle(const circle&V);
~circle()
{
    Kol--;
}
static int GetKol() 
{
    return Kol;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
circle::circle()
{
    x=(rand()%20)-10;
    y=(rand()%20)-10;
    r=rand()%10+1;
    Kol++;
}
circle::circle(double myX,double myY,double myR)
{
    x=myX;
    y=myY;
    r=myR;
    Kol++;
}
circle::circle(const circle&V)
{
    x=V.x;
    y=V.y;
    r=V.r;
    Kol++;
}
0
outoftime
║XLR8║
510 / 432 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
12.05.2014, 23:13 #6
Цитата Сообщение от gek11 Посмотреть сообщение
Но деструктору нужно, чтобы память для переменных была выделена динамически
Не совсем, нужно всего лишь что-бы деструктор вызвался до завершения программы.
C++
1
2
3
4
5
6
int main() {
    std::vector<int> v1; // вызов конструктора класса для v1
    std::vector<int>* v2 = new vector<int>(); // вызов конструктора класса для v2
    delete v2; // вызов деструктора класса для v2
    return 0; // вызов деструктора класса для v1
}
Вызов деструктора не динамических переменных происходит когда заканчивается их сток жизни (когда покидается их области и т.д.).

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class calc {
private:
    static int _n = 0;
public:
    calc() { ++_n; }
    ~calc() { --_n; }
    static int getNubmerOfInstances() {
        return _n;
    }
};
 
void measurement() {
    calc c1, *c2 = new calc();
    calc::getNubmerOfInstances(); // 2
    delete c2;
    calc::getNubmerOfInstances(); // 1
}
 
int main() {
    measurement();
    calc::getNubmerOfInstances(); // 0
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2014, 23:13
Привет! Вот еще темы с ответами:

Динамически выделить память под массив функций - C++
QByteArray (SerfingThread::*lp_GetRequest)(const QByteArray&amp; ,const QByteArray&amp;); как сделать тоже самое только через new? как правильно...

Как выделить память под динамические переменные при создании класса? - C++
В прошлой теме ответ получил, но не до конца. Вопрос такой, как выделить память под динамические переменные? Вот часть кода ...

Динамически выделить память под верхний треугольник квадратной матрицы - C++
прога все считает, но в конце выдается системная ошибка... я пришел к выводу, что ошибка - в выделении памяти под верхний треугольник...

Что будет, если два раза динамически выделить память по одному указателю? - C++
Например: int *mas = new int; mas = new int;


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

Или воспользуйтесь поиском по форуму:
6
Yandex
Объявления
12.05.2014, 23:13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru