Pourquoi je ne peux pas faire ça ?
class A
{
public:
int a, b;
};
class B : public A
{
B() : A(), a(0), b(0)
{
}
};
Pourquoi je ne peux pas faire ça ?
class A
{
public:
int a, b;
};
class B : public A
{
B() : A(), a(0), b(0)
{
}
};
Laissant de côté le fait qu'ils sont private
, puisque a
et b
sont membres de A
, ils sont censés être initialisés par A
's constructeurs, pas par les constructeurs d'une autre classe (dérivé ou non).
Essayer:
class A
{
int a, b;
protected: // or public:
A(int a, int b): a(a), b(b) {}
};
class B : public A
{
B() : A(0, 0) {}
};
D'une manière ou d'une autre, personne n'a énuméré le moyen le plus simple :
class A
{
public:
int a, b;
};
class B : public A
{
B()
{
a = 0;
b = 0;
}
};
Vous ne pouvez pas accéder aux membres de base dans la liste d'initialisation, mais le constructeur lui-même, comme toute autre méthode membre, peut accéder aux membres public
et protected
de la classe de base.
# include<stdio.h>
# include<iostream>
# include<conio.h>
using namespace std;
class Base{
public:
Base(int i, float f, double d): i(i), f(f), d(d)
{
}
virtual void Show()=0;
protected:
int i;
float f;
double d;
};
class Derived: public Base{
public:
Derived(int i, float f, double d): Base( i, f, d)
{
}
void Show()
{
cout<< "int i = "<<i<<endl<<"float f = "<<f<<endl <<"double d = "<<d<<endl;
}
};
int main(){
Base * b = new Derived(10, 1.2, 3.89);
b->Show();
return 0;
}
C'est un exemple pratique au cas où vous voudriez initialiser les membres de données de la classe de base présents dans l'objet de la classe dérivée, alors que vous souhaitez pousser ces valeurs en s'interfaçant via l'appel du constructeur de la classe dérivée.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.