C++ как создавать обьэкты класса через указатель?

Учу по немного С++. Как говориться через указать можно создать динамический массив, а значит вопрос такой, можно ли создать так-же динамическое количество обьэктов класса? И как сними работать?

Я написал небольшой код, по нему я заметил что вроде они создаются но через указатель могу обращаться только к самому первому обьэкту почему?

#include <iostream>
#include <conio.h>
using namespace std;

int i1 = 0;

class Test
{
	public:
        Test()
        {
        	i = i1;
        	i1 = i1 + 1;
		}
		
		~Test()
		{
		    i = 0;
		    i1 = i1 - 1;
		}
		
		void ShowID()
		{
			cout << "Object ID is :" << i << endl;
		}
		private:
			int i;
			protected:
};

int main()
{
	long int num;
	cin >> num;
	cout << endl;
    Test *obj= new Test[num];
    obj->ShowID(); // Думал напишу obj[Тут номер обьэкта] и будет работать но нет...
    Test test01;
    test01.ShowID();
	_getch();
    return 0;
}
  • Вопрос задан
  • 497 просмотров
Решения вопроса 2
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
obj->ShowID(); // Думал напишу obj[Тут номер обьэкта] и будет работать но нет...

obj[N].ShowID();
Если бы ты прочитал элементарную книжку по C или C++ таких вопросов бы не возникло. Потому что там написано, что запись a[b] эквивалентна записи *(a + b).

Test *obj2= obj + sizeof (Test);
objN= obj + (sizeof (Test) * N) ;

Александр не нужно умножать N на sizeof (Test), компилятор сделает это сам: obj2 = obj + 1; objN = obj + N;
Ответ написан
myjcom
@myjcom Куратор тега C++
#include <iostream>
#include <conio.h>
using namespace std;

int i1 = 0;

class Test
{
  int _id;
  public:
    Test(int id = i1++):_id(id)
    {
        cout << "Create Object: " << this << " _id: " << _id << endl;
    }

    ~Test()
    {
        cout << "Delete Object: " << this << " _id: " << _id << endl;
        if(i1) i1--;
    }

    void ShowID()
    {
        cout << "ShowID() " << this << " _id: " << _id << endl;
    }
};


int main()
{
    long int num;
    cin >> num;
    cout << endl;
    Test *obj= new Test[num];
    for(int i=0; i < num; ++i)
    {
        obj[i].ShowID();
    }
    delete[] obj;
    _getch();
    return 0;
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы