У меня есть класс Film, который содержит целочисленный указатель Chapitres и количество элементов этого массива Count_chapitres.
class film : public video
{
private:
int* Chapitres;
unsigned int Count_chapitres;
public:
film();
film(int* Chapitres, unsigned int Count_Chapitres, int Duree, string Name, string Filename);
virtual ~film();
void setChapitres (int * Chapitres, unsigned int Count_Chapitres);
int * getChapitres() const;
unsigned int getCountChapitres() const;
void printOut (ostream & Display) const;
};
Очевидная проблема заключается в том, что выдача указателя нарушит инкапсуляцию.
1) Я попытался установить выход get для const int *, в котором просто приведение результата обратно с использованием const_cast вернуло меру назад.Так как указатель Зла позволил внешнему изменению данных фильма внешне:
film* file2 = new film(Chaps, 3, 5, "hany", "daher");
file2->printOut(cout);
int * Evil = const_cast<int *>(file2->getChapitres());
*(Evil +1)=9;
file2->printOut(cout);
2) Кроме того, даже несмотря на то, что в качестве аргументов для моего конструктора / установщика я указал const int *, он по-прежнему принимает объекты int * в качестве аргументов в основном процессе создания.ключевое слово const существенно избыточно.
Решение, очевидно, не заключается в указателях на постоянные значения.Есть идеи, как поступить?