На ваш вопрос в качестве вопроса
// in .h
class Foo
{
private:
char charArray[32];
public:
const char *getCharArray() const;
};
// in .cpp
// include the header!
const char *Foo::getCharArray() const
{
return charArray;
}
Имейте в виду, что приведенное выше возвращает указатель на личные данные класса Foo
(а не копию массива).Спецификаторы const
не позволяют вызывающей стороне (преднамеренно или случайно) использовать возвращаемый указатель для манипулирования закрытыми данными класса Foo
.
Однако ваш подход (использование необработанного массива char
в классе) считается плохим подходом в C ++.Его тоже сложнее использовать.
Лучше было бы использовать стандартный контейнер, а не необработанный массив.
// in .h
#include <array> // C++11 and later
class Foo
{
private:
std::array<char, 32> charArray;
public:
std::array<char, 32> getCharArray() const;
};
// in .cpp
// include the header!
std::array<char, 3> Foo::getCharArray() const
{
return charArray;
}
В этом подходе вызывающий Foo::getCharArray()
получает копию всего массива, а не указатель или ссылку на личные данные класса Foo
.Вызывающая сторона может безопасно обновить полученный массив, а затем передать его обратно в класс Foo
(например, через установщик).Принимая во внимание, что при использовании указателя и необработанного массива для достижения аналогичного эффекта требуется больше гимнастики.
При желании в приведенном выше примере может быть возвращена ссылка const
на std::array<char, 3>
, что позволяет избежать некоторыхненужное копирование завершенных объектов.