J'essaie d'obtenir le code suivant fonctionner, mais je ne trouve pas de documentation suffisante sur la manière dont C ++ gère le public vs héritage privé pour me permettre de faire ce que je veux. Si quelqu'un pouvait expliquer pourquoi je ne peux pas accéder à parent :: setsize (int) code> ou parent :: Taille code> Utilisation d'une héritage privé ou Parent :: Taille Code > Utiliser l'héritage public. Pour résoudre ce problème, j'ai besoin d'un getiser () code> et setsize () code> méthode dans le parent? class Parent {
private:
int size;
public:
void setSize(int s);
};
void Parent::setSize(int s) {
size = s;
}
class Child : private Parent {
private:
int c;
public:
void print();
};
void Child::print() {
cout << size << endl;
}
int main() {
Child child;
child.setSize(4);
child.print();
return 0;
}
4 Réponses :
Lorsque vous utilisez l'héritage privé, tous les membres publics et protégés de la classe de base deviennent privés dans la classe dérivée. Dans votre exemple, Aussi, setsize code> devient privé dans enfant code>, vous ne pouvez donc pas l'appeler à partir de principal code>. P>
Taille code> est déjà privé dans parent code>. Une fois déclaré privé, un membre reste toujours privé à la classe de base, quel que soit le type d'héritage. P>
YEP et les membres privés ne sont pas hérités, c'est pourquoi vous ne pouvez pas accéder aux membres privés de la classe de base
@Ned Batchelder: C'est pourquoi j'ai voté pour votre réponse. :) Je ne sais pas ce que veut exactement l'OP, car le héritage public normal aurait bien fonctionné.
Vous ne pouvez pas accéder aux membres de données privés d'autres classes. Si vous souhaitez accéder aux attributs privés d'une superclas, vous devez le faire via des accesseurs publics ou protégés. Quant au reste, voir @ Casablanca's Répondre . P>
Modifier le parent à: si vous souhaitez accéder à la taille code> membre code> d'une classe dérivée, mais pas de l'extérieur de la classe, alors vous voulez changer d'enfant à: p> Lorsque vous dites protégé code>. p> Classe enfant: Parent privé code>, vous disent que cela devrait être un secret que l'enfant est un parent. Votre code code> MAIN code> indique clairement que vous voulez que votre enfant soit manipulé comme un parent, il devrait donc être héritage public. P> P>
#include <iostream>
using namespace std;
class Parent {
private:
int size;
public:
void setSize(int s);
int fun() //member function from base class to access the protected variable
{
return size;
}
};
void Parent::setSize(int s) {
size = s;
}
class Child : private Parent {
private:
int c;
public:
void print();
using Parent::setSize; //new code line
using Parent::fun; //new code line
};
void Child::print() {
cout << fun() << endl;
}
int main() {
Child child;
child.setSize(4);
child.print();
return 0;
}
Bienvenue dans le débordement de la pile! Je vous recommande Prendre la tournée . Lorsque vous donnez une réponse, il est préférable de donner une explication sur la raison pour laquelle votre réponse est celle de votre réponse.