Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

sécurisation de code: utilisation de const

3 réponses
Avatar
heinquoi
Bjr,

J'ai des données dont je connait pas au moment de la compilation leur
contenu. Une fois initialisé elle garde la meme valeur:
class ClassWindows
{
public:
LPCTSTR lpsNomApp, lpsTitre; //ICI
HINSTANCE hInst;//ICI
HWND hWnd;//ICI
MSG message;//ICI
int nCmdShow;//ICI
WNDCLASS wc;
void BoucleTransMes ();
bool EnregistrementFenetre ();
static LRESULT CALLBACK WndProc (HWND hWnd,
UINT uMsg, WPARAM wParam,LPARAM lParam);

ClassWindows (LPCTSTR, LPCTSTR, HINSTANCE, int );

~ClassWindows(){}
};

je les initialise lors de l'appel au constructeur.
n'y aurait il pas une solution plus sur avec const, pour qu'une fois
initalisé, je ne puisse pas les modifier, avec const par exemple.Merci pour
votre aide.
Heinquoi

3 réponses

Avatar
Michel Michaud
Dans news:409cbdf8$0$27682$,
Bjr,

J'ai des données dont je connait pas au moment de la
compilation leur contenu. Une fois initialisé elle garde la
meme valeur:
class ClassWindows
{
public:
LPCTSTR lpsNomApp, lpsTitre; //ICI
HINSTANCE hInst;//ICI
HWND hWnd;//ICI
MSG message;//ICI
int nCmdShow;//ICI
[...]

je les initialise lors de l'appel au constructeur.
n'y aurait il pas une solution plus sur avec const, pour qu'une
fois initalisé, je ne puisse pas les modifier, avec const par
exemple.Merci pour votre aide.


Si tu les initialises dans le constructeur, plus spécifiquement
dans la liste d'initialisation, tu peux simplement les déclarer
const.

class ClassWindows
{
public:
const LPCTSTR lpsNomApp, lpsTitre; //ICI
const HINSTANCE hInst;//ICI
// etc.

Mais attention, LPCTSTR c'est probablement un typedef pour des
pointeurs et il faudra que tu décides ce que tu veux qui soit
const exactement, le pointeur et/ou l'objet pointé...

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/

Avatar
Le Géant Vert
ben avant de penser au const, il faudrait je pense mettre tes données en
private, et ne fournir que des getters const ; sans setter, pas moyen de
modifier ces données à l'extérieur de la classe.
Ex. générique :

class ClassWindows
{
public:
ClassWindows(const Data &rData) : m_data(rData) { }
// + assignment operator + copy ctor + dtor

const Data &data() const { return m_data; }

private:
Data m_data;
};

depuis l'extérieur le seul moyen d'acceder à m_data est le getter, qui
est const, donc impossible de modifier quoi que ce soit.

(au passage, note que LPCSTR est un typedef ; LP = long pointer, C =
const, STR = chaine/char * => const char *)

heinquoi wrote:

Bjr,

J'ai des données dont je connait pas au moment de la compilation leur
contenu. Une fois initialisé elle garde la meme valeur:
class ClassWindows
{
public:
LPCTSTR lpsNomApp, lpsTitre; //ICI
HINSTANCE hInst;//ICI
HWND hWnd;//ICI
MSG message;//ICI
int nCmdShow;//ICI
WNDCLASS wc;
void BoucleTransMes ();
bool EnregistrementFenetre ();
static LRESULT CALLBACK WndProc (HWND hWnd,
UINT uMsg, WPARAM wParam,LPARAM lParam);

ClassWindows (LPCTSTR, LPCTSTR, HINSTANCE, int );

~ClassWindows(){}
};

je les initialise lors de l'appel au constructeur.
n'y aurait il pas une solution plus sur avec const, pour qu'une fois
initalisé, je ne puisse pas les modifier, avec const par exemple.Merci pour
votre aide.
Heinquoi








Avatar
drkm
"heinquoi" <nospam* writes:

J'ai des données dont je connait pas au moment de la compilation leur
contenu. Une fois initialisé elle garde la meme valeur:
class ClassWindows


[...]

je les initialise lors de l'appel au constructeur.
n'y aurait il pas une solution plus sur avec const, pour qu'une fois
initalisé, je ne puisse pas les modifier, avec const par exemple.Merci pour
votre aide.


class A
{
public:
A()
 : myInteger( une_valeur )
{
}

private:
int const myInteger ;
} ;

--drkm