Maison >développement back-end >C++ >Comment puis-je accéder aux variables héritées des classes parents modélisées en C ?

Comment puis-je accéder aux variables héritées des classes parents modélisées en C ?

DDD
DDDoriginal
2024-12-20 10:34:16773parcourir

How Can I Access Inherited Variables from Templated Parent Classes in C  ?

Accès aux variables héritées des classes parents basées sur un modèle

En réponse à la question concernant l'accessibilité des variables dans les classes parents basées sur un modèle, il est impératif de clarifier que les compilateurs GNU C modernes, à partir de la version 3.4.6, adhèrent strictement au standard C. Cela stipule que les noms non qualifiés dans les modèles sont invariablement indépendants. Par conséquent, la résolution de ces noms au moment de la définition du modèle devient irréalisable en raison de la nature inconnue des spécialisations de classes de base dépendantes, comme dans l'extrait de code fourni :

template<class T> class Foo
{
public:
  Foo() { a = 1; }

protected:
  int a;
};

template<class T> class Bar : public Foo<T>
{
public:
  Bar() { b = 4; };

  int Perna(int u);

protected:
  int b;

};

template<class T> int Bar<T>::Perna(int u) 
{ 
  int c = Foo<T>::a * 4; // This works
  return (a + b) * u;    // This doesn't
}

Ce comportement découle de l'obligation d'identifier les noms non qualifiés lors de la définition du modèle. définition de modèle, ce qui n'est pas possible pour les classes de base dépendantes en raison de potentielles spécialisations futures. Par conséquent, les tentatives d'accès à la variable protégée 'a' sans qualification dans la méthode 'Perna' de 'Bar' entraîneront des erreurs.

Pour contourner cette limitation, il est nécessaire d'utiliser le nom qualifié 'Foo

using Foo<T>::a;

int c = a * 4; // Now valid

De plus, les noms de fonctions non qualifiés déclarés dans la classe de base sont également soumis à cette restriction. Pour accéder à de telles fonctions, il faut soit utiliser des noms qualifiés, soit fournir une déclaration 'using'.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn