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

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

Восстановить пароль Регистрация
 
gek11
0 / 0 / 0
Регистрация: 03.10.2013
Сообщений: 20
08.05.2014, 08:54     Как динамически выделить память для конструкторов класса? #1
подскажите как динамически выделить память для конструкторов класса?

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);
...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
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;
}
gek11
0 / 0 / 0
Регистрация: 03.10.2013
Сообщений: 20
12.05.2014, 17:39  [ТС]     Как динамически выделить память для конструкторов класса? #3
Все таки никак не могу разобраться :С
у меня есть программа, считающая количество(++) созданных переменных класса по трем конструкторам. Так же нужно сделать для деструктора, только -- каждое удаление. Но деструктору нужно, чтобы память для переменных была выделена динамически. Из вашего ответа я совсем ничего не понял,можете поподробнее объяснить ?
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
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;
}
На каждый объект вызывается конструктор и деструктор. И то и другое при вызове сообщают кол-во имеющихся/оставшихся объектов класса.
Если что-то непонятно, выкладывайте код который есть и добавьте конкретики в Ваш вопрос.
gek11
0 / 0 / 0
Регистрация: 03.10.2013
Сообщений: 20
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++;
}
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
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
}
Yandex
Объявления
12.05.2014, 23:13     Как динамически выделить память для конструкторов класса?
Ответ Создать тему
Опции темы

Текущее время: 14:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru