OVH Cloud OVH Cloud

Les classes et les méthodes

3 réponses
Avatar
Penguin_X
Salut. Si j'écrit un programme qui ecrit une string dans un fichier et
je voudrais faire ça avec des classes. Est-ce que je peut faire une
méthode qui écrit ma string(une variable privé que jaurais pris le soin
de définir avec un objet). Merci d'avance :)

Voici un exemple:

class monfichier
{
private:
char szMonNomDeFichier[50];
char szMonBuffer[1024];

public:
int setName(char szFileName[50])
{
this->szszMonNomDeFichier;
}

int getData(char szBuffer[1024])
{
this->szMonBuffer;
}

void ecritFichier()
{
// ici j'écrit dans le fichier avec szMonNomDeFichier et avec
// szMonNomDeFichier et j'écrit le buffer dans le fichier
}

};

int main()
{
monfichier mySelf; // je crée un objet

// apres j'utilise ma classe pour travailler dans mon
// fichier avec les méthodes contenu dans celle-ci
}
--
#include <iostream>
#include <string>

int main(){
string myFavoriteOS = "Unix";
cout << "My favorite OS is "
<< myFavoriteOS << end;
return 0;
}

3 réponses

Avatar
Stephane Wirtel
Salut. Si j'écrit un programme qui ecrit une string dans un fichier et
je voudrais faire ça avec des classes. Est-ce que je peut faire une
méthode qui écrit ma string(une variable privé que jaurais pris le soin
de définir avec un objet). Merci d'avance :)
oui.

#include <iostream>
#include <string>
#include <fstream>
#include <memory>
#include <exception>

class Person {
public :
Person (const std::string& pFirstname, const std::string& pLastname) : mFirstname (pFirstname), mLastname (pLastname) {
std::cout << "Person::Person" << std::endl;
}
~Person () {
std::cout << "Person::~Person" << std::endl;
}
void SetFirstname (const std::string& pFirstname) {
std::cout << "Person::SetFirstname" << std::endl;
mFirstname = pFirstname;
}
void SetLastname (const std::string& pLastname) {
std::cout << "Person::SetLastname" << std::endl;
mLastname = pLastname;
}
const std::string& GetFirstname (void) const {
std::cout << "Person::GetFirstname" << std::endl;
return mFirstname;
}
const std::string& GetLastname (void) const {
std::cout << "Person::GetLastname" << std::endl;
return mLastname;
}
void SaveToFile (const std::string& pFilename) throw (std::exception) {
std::cout << "Person::SaveToFile" << std::endl;
try {
std::fstream fileOut(pFilename, std::ios::out);
fileOut << "Firstname : " << GetFirstname () << std::endl
<< "Lastname : " << GetLastname () << std::endl;
fileOut.close ();
} catch (const std::exception& pException) {
// traitement si il y en a un.
throw pException;
}
}
};

int main (int argc, char **argv) {
try {
std::auto_ptr <Person> person (new Person ("Stephane", "Wirtel"));
person->SaveToFile ("Person.txt");
} catch (const std::exception& pException) {
std::cout << "Exception levée : " << pException.what () << std::endl;
}
return 0;
}

Je n'ai pas testé ni compilé, mais ne devrait pas poser de problèmes.


Voici un exemple:

class monfichier
{
private:
char szMonNomDeFichier[50];
char szMonBuffer[1024];
Utiliser des std::string c'est un peu mieux.


public:
int setName(char szFileName[50])
{
this->szszMonNomDeFichier;
}

int getData(char szBuffer[1024])
{
this->szMonBuffer;
}

void ecritFichier()
{
// ici j'écrit dans le fichier avec szMonNomDeFichier et avec
// szMonNomDeFichier et j'écrit le buffer dans le fichier
}

};

int main()
int main (int argc, char **argv)

{
monfichier mySelf; // je crée un objet

// apres j'utilise ma classe pour travailler dans mon
// fichier avec les méthodes contenu dans celle-ci
}


Y a des erreurs dans ta signature.

Cela fonctionnerait si par exemple tu rajouterais "using namespace std" ou que tu préfixes "cout", "endl" avec "std::" ou même que tu fasses
#include <iostream.h> etc... ;-)

Bonne journée.

Avatar
Penguin_X
Stephane Wirtel wrote:

Salut. Si j'écrit un programme qui ecrit une string dans un fichier et
je voudrais faire ça avec des classes. Est-ce que je peut faire une
méthode qui écrit ma string(une variable privé que jaurais pris le
soin de définir avec un objet). Merci d'avance :)


oui.
#include <iostream>
#include <string>
#include <fstream>
#include <memory>
#include <exception>

class Person {
public :
Person (const std::string& pFirstname, const std::string&
pLastname) : mFirstname (pFirstname), mLastname (pLastname) {
std::cout << "Person::Person" << std::endl;
}
~Person () {
std::cout << "Person::~Person" << std::endl;
}
void SetFirstname (const std::string& pFirstname) {
std::cout << "Person::SetFirstname" << std::endl;
mFirstname = pFirstname;
}
void SetLastname (const std::string& pLastname) {
std::cout << "Person::SetLastname" << std::endl;
mLastname = pLastname;
}
const std::string& GetFirstname (void) const {
std::cout << "Person::GetFirstname" << std::endl;
return mFirstname;
}
const std::string& GetLastname (void) const {
std::cout << "Person::GetLastname" << std::endl;
return mLastname;
}
void SaveToFile (const std::string& pFilename) throw
(std::exception) {
std::cout << "Person::SaveToFile" << std::endl;
try {
std::fstream fileOut(pFilename, std::ios::out);
fileOut << "Firstname : " << GetFirstname () << std::endl
<< "Lastname : " << GetLastname () << std::endl;
fileOut.close ();
} catch (const std::exception& pException) {
// traitement si il y en a un.
throw pException;
}
}
};

int main (int argc, char **argv) {
try {
std::auto_ptr <Person> person (new Person ("Stephane", "Wirtel"));
person->SaveToFile ("Person.txt");
} catch (const std::exception& pException) {
std::cout << "Exception levée : " << pException.what () <<
std::endl;
}
return 0;
}

Je n'ai pas testé ni compilé, mais ne devrait pas poser de problèmes.


Voici un exemple:

class monfichier
{
private:
char szMonNomDeFichier[50];
char szMonBuffer[1024];


Utiliser des std::string c'est un peu mieux.


public:
int setName(char szFileName[50])
{
this->szszMonNomDeFichier;
}

int getData(char szBuffer[1024])
{
this->szMonBuffer;
}

void ecritFichier()
{
// ici j'écrit dans le fichier avec szMonNomDeFichier et avec
// szMonNomDeFichier et j'écrit le buffer dans le fichier
}

};

int main()


int main (int argc, char **argv)

{
monfichier mySelf; // je crée un objet

// apres j'utilise ma classe pour travailler dans mon
// fichier avec les méthodes contenu dans celle-ci
}



Y a des erreurs dans ta signature.

Cela fonctionnerait si par exemple tu rajouterais "using namespace std"
ou que tu préfixes "cout", "endl" avec "std::" ou même que tu fasses
#include <iostream.h> etc... ;-)

Bonne journée.
Merci ! Cet exemple vient de répondre à mes problèmes :)


--
#include <iostream>
#include <string>

int main(){
string myFavoriteOS = "Unix";
cout << "My favorite OS is "
<< myFavoriteOS << end;
return 0;
}


Avatar
Ahmed MOHAMED ALI
Stephane Wirtel wrote

int main (int argc, char **argv) {
try {
std::auto_ptr <Person> person (new Person ("Stephane", "Wirtel"));
person->SaveToFile ("Person.txt");
} catch (const std::exception& pException) {
std::cout << "Exception levée : " << pException.what () << std::endl;
}
return 0;
}


L'allocation avec new n'est pas nécessaire ici.
On pourrait écrire plus simplement :

int main (int argc, char **argv) {
...
Person person ("Stephane", "Wirtel");
person.SaveToFile ("Person.txt");
...
}

C'est plus rapide et ne nécessite pas de gestion mémoire.

Ahmed

"Stephane Wirtel" wrote in message
news:d3ih4h$74u$
Salut. Si j'écrit un programme qui ecrit une string dans un fichier et
je voudrais faire ça avec des classes. Est-ce que je peut faire une
méthode qui écrit ma string(une variable privé que jaurais pris le soin
de définir avec un objet). Merci d'avance :)
oui.

#include <iostream>
#include <string>
#include <fstream>
#include <memory>
#include <exception>

class Person {
public :
Person (const std::string& pFirstname, const std::string& pLastname) :
mFirstname (pFirstname), mLastname (pLastname) {

std::cout << "Person::Person" << std::endl;
}
~Person () {
std::cout << "Person::~Person" << std::endl;
}
void SetFirstname (const std::string& pFirstname) {
std::cout << "Person::SetFirstname" << std::endl;
mFirstname = pFirstname;
}
void SetLastname (const std::string& pLastname) {
std::cout << "Person::SetLastname" << std::endl;
mLastname = pLastname;
}
const std::string& GetFirstname (void) const {
std::cout << "Person::GetFirstname" << std::endl;
return mFirstname;
}
const std::string& GetLastname (void) const {
std::cout << "Person::GetLastname" << std::endl;
return mLastname;
}
void SaveToFile (const std::string& pFilename) throw (std::exception) {
std::cout << "Person::SaveToFile" << std::endl;
try {
std::fstream fileOut(pFilename, std::ios::out);
fileOut << "Firstname : " << GetFirstname () << std::endl
<< "Lastname : " << GetLastname () << std::endl;
fileOut.close ();
} catch (const std::exception& pException) {
// traitement si il y en a un.
throw pException;
}
}
};

int main (int argc, char **argv) {
try {
std::auto_ptr <Person> person (new Person ("Stephane", "Wirtel"));
person->SaveToFile ("Person.txt");
} catch (const std::exception& pException) {
std::cout << "Exception levée : " << pException.what () << std::endl;
}
return 0;
}

Je n'ai pas testé ni compilé, mais ne devrait pas poser de problèmes.


Voici un exemple:

class monfichier
{
private:
char szMonNomDeFichier[50];
char szMonBuffer[1024];
Utiliser des std::string c'est un peu mieux.


public:
int setName(char szFileName[50])
{
this->szszMonNomDeFichier;
}

int getData(char szBuffer[1024])
{
this->szMonBuffer;
}

void ecritFichier()
{
// ici j'écrit dans le fichier avec szMonNomDeFichier et avec
// szMonNomDeFichier et j'écrit le buffer dans le fichier
}

};

int main()
int main (int argc, char **argv)

{
monfichier mySelf; // je crée un objet

// apres j'utilise ma classe pour travailler dans mon
// fichier avec les méthodes contenu dans celle-ci
}


Y a des erreurs dans ta signature.

Cela fonctionnerait si par exemple tu rajouterais "using namespace std" ou
que tu préfixes "cout", "endl" avec "std::" ou même que tu fasses

#include <iostream.h> etc... ;-)

Bonne journée.