C++ обьяснить участок кода

121
15 сентября 2019, 19:00

Описан класс. Не понимаю двух моментов:

  1. Зачем приводить к типу void*, когда пользуешься memcpy
  2. У методов после их названия, для чего стоит const?

Код привожу ниже:

class CDataArray { 
private: 
	int* pData; 
	int NumEl; 
public: 
	CDataArray(int* pArray, int n) { 
		NumEl = n; 
		pData = new int[n]; 
		memcpy((void*)pData, (void*)pArray, 4 * NumEl); 
	}; 
	CDataArray() { 
		NumEl = 0; 
		pData = NULL; 
	}; 
	CDataArray(int n) { 
		pData = new int[n]; 
		NumEl = n; 
	}; 
	~CDataArray() { 
		if (NumEl > 0) delete[] pData; 
	}; 
	int Size() const { 
		return NumEl; 
	} 
	int* GetPtr() const { 
		return pData; 
	} 
};

Answer 1

Зачем приводить к типу void*, когда пользуешься memcpy

Незачем. Ошибкой это не является, просто бессмысленная операция.

У методов после их названия, для чего стоит const?

Таким образом объявляется метод, вызов которого не меняет состояния экземпляра класса. Такой метод не может изменять состояния полей, за исключением данных, объявленных с ключевым словом mutable, а также не может вызывать неконстантные методы этого же класса.

В целом класс написан плоховато, стиль на троечку. Не то, что стоит изучать в качестве примера.

READ ALSO
Переименование файлов в каталоге

Переименование файлов в каталоге

Подскажите почему не происходит замена, компилирует, но замена не происходит

144
Разработка и отладка для arm-linux из Visual Studio

Разработка и отладка для arm-linux из Visual Studio

может быть кто то сталкивался с подобным ? Есть эмулятор Raspberry Pi emulation for Windows https://sourceforgenet/projects/rpiqemuwindows/ Линукс запускается там Есть реальная...

147
Что будет эффективнее?

Что будет эффективнее?

Имеем мы 8 функций:

145