Если вы хотите сделать атрибут личным, но все же намереваетесь разрешить его установку, то обычно используется идиома для создания «сеттера».
В этом случае вам нужно сделать это дважды, для каждого из ваших классов с закрытыми атрибутами, которые вы все же хотите установить.
class Student{
public:
void setroll(int newroll)
{
roll = newroll;
}
private:
int roll;
char name1[15];
};
class Subject {
public:
void setstudentsroll(int newroll, int index)
{
/* a good setter would at this point check the index,
to make sure it does not access beyond the array */
s[index].setroll(newroll);
}
private:
Student s[10];
};
int main()
{
Subject s1;
s1.setstudentsroll(5,1); // trying to set roll of 1st student
return 0;
}
Использование ключевого слова friend
для этого возможно для внутреннего случая, когда код доступа находится в классе, который можетбыть названным.Но, и я предполагаю, что это реальная проблема, с которой вы столкнулись, она не помогает разрешить настройку main()
.