Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
gek11
0 / 0 / 0
Регистрация: 03.10.2013
Сообщений: 32
1

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

08.05.2014, 08:54. Просмотров 659. Ответов 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
Ответы с готовыми решениями:

Как выделить динамически память для данных класса
Как выделить динамически память для данных класса ? class circle { double...

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

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

Как выделить память для класса
Привет, я пишу библиотеку управления памятью. На данный момент я выделяю память...

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

5
dimcoder
Полярный
467 / 440 / 157
Регистрация: 11.09.2011
Сообщений: 1,142
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
Сообщений: 32
12.05.2014, 17:39  [ТС] 3
Все таки никак не могу разобраться :С
у меня есть программа, считающая количество(++) созданных переменных класса по трем конструкторам. Так же нужно сделать для деструктора, только -- каждое удаление. Но деструктору нужно, чтобы память для переменных была выделена динамически. Из вашего ответа я совсем ничего не понял,можете поподробнее объяснить ?
0
dimcoder
Полярный
467 / 440 / 157
Регистрация: 11.09.2011
Сообщений: 1,142
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
Сообщений: 32
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║
763 / 662 / 212
Регистрация: 25.07.2009
Сообщений: 3,320
Записей в блоге: 5
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
12.05.2014, 23:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2014, 23:13

Динамически выделить память под массив
Добрый день форусчани Как можно выделить память под массив объекта класса...

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

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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