Implementacja konstruktora klasy i metod

0

Cześć,
mam problem z zaimplementowaniem poniższego konstruktora wraz z metodami. Mylą, mnie te const char* , potrafie zaimplementować klase, jeżeli te metody nie są przedstawione ze wskaźnikami, jakieś rady, w jaki sposób mogę to zadeklarować.

#ifndef _class_H
#define _class_H
#include <iostream>
#include <string.h>

using namespace std;

class Contact {

public:
    Contact(const char * name, const char * address, const char * tel);
    ~Contact(void);
    const char * Name (void) const {return name;}
    const char * Address (void) const {return address;}
    const char * Tel (void) const {return tel;}
    friend ostream& operator << (ostream&, Contact&);

private:
    char *name;     //contact name
    char *address;  //contact address
    char *tel;      //contact telephone number
};
#endif
0

Zdecyduj się na std::string i przestanie cię boleć głowa, o co chodzi z tymi wskaźnikami.

0

Wypadałoby w konstruktorze zaalokować pamięć pod te napisy i skopiować z parametrów (funkcją malloc albo new[], strcpy) a w destruktorze zwolnić (free albo delete[]).

0

Any idea?

Jeśli już koniecznie musi to być char* daj w ctorze alokacje operatorem new[] dla poszczególnych składowych,
używając obecnie przekazanych argumentów, oraz kopiowanie łańcuchów przy pomocy strcpy (lub jednej z bezpiecznych wersji).
Następnie w dtorze daj zwolnienie pamięci operatorem delete[].

Contact::Contact(const char * name, const char * address, const char * tel)
    :name{ new char[strlen(name) + 1] },
    address{ new char[strlen(address) + 1] },
    tel{ new char[strlen(tel) + 1] }
{
    strcpy(this->name, name);
    strcpy(this->address, address);
    strcpy(this->tel, tel);
}

Contact::~Contact(void)
{
    delete[] name;
    delete[] address;
    delete[] tel;
}

ostream & operator<<(ostream & os, Contact & c)
{
    return os << c.name << ", " << c.address << "[" << c.tel << "]";
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1