I use string::copy function in my copy constructor(deep copy) and when I use it, it appends some not meaningful characters to my string. Here is my main function:
#include <iostream>
#include "SimpleMusicAlbum.h"
int main(){
MusicAlbum msc("a7x","Seize the day",2005);
cout << msc.getMusicAlbumArtist() <<endl;
cout << msc.getMusicAlbumTitle() <<endl;
cout << msc.getMusicAlbumYear() <<endl;
MusicAlbum msc2(msc);
cout << msc2.getMusicAlbumArtist() <<endl;
cout << msc2.getMusicAlbumTitle() <<endl;
cout << msc2.getMusicAlbumYear() <<endl;
//MusicAlbum msc3(msc);
return 0;
}
a strange point is that when I write a7x instead of Avenged sevenfold to title, it does not append characters.
Here is the header SimpleMusicAlbum.h:
#ifndef __SIMPLE_MUSIC_ALBUM_H
#define __SIMPLE_MUSIC_ALBUM_H
#include <string>
using namespace std;
class MusicAlbum {
public:
MusicAlbum(const string maArtist = "",
const string maTitle = "",
const int maYear = 0);
~MusicAlbum();
MusicAlbum(const MusicAlbum &maToCopy);
void operator=(const MusicAlbum &right);
string getMusicAlbumArtist();
string getMusicAlbumTitle();
int getMusicAlbumYear();
private:
string artist;
string title;
int year;
};
#endif
Here is SimpleMusicAlbum.cpp:
MusicAlbum::MusicAlbum(const string maArtist,
const string maTitle,
const int maYear){
artist = maArtist;
title = maTitle;
year = maYear;
}
//the problem is here
MusicAlbum::MusicAlbum(const MusicAlbum &maToCopy){
char artistTemp[maToCopy.artist.size()] ;
char titleTemp[maToCopy.title.size()];
cout << maToCopy.artist.size() << endl;
maToCopy.artist.copy(artistTemp, maToCopy.artist.size(), 0);
artist = artistTemp;
maToCopy.title.copy(titleTemp,maToCopy.title.size(),0);
title = titleTemp;
this->year = maToCopy.year;
}
//same problem occurs here
void MusicAlbum::operator=(const MusicAlbum &right){
char artistTemp[right.artist.size()];
char titleTemp[right.title.size()];
right.artist.copy(artistTemp, right.artist.size(), 0);
artist = artistTemp;
right.title.copy(titleTemp,right.title.size(),0);
title = titleTemp;
this->year = right.year;
}
//destructor
MusicAlbum::~MusicAlbum(){
// no allocation, no destruction.
}
//methods
string MusicAlbum::getMusicAlbumArtist() {
return artist;
}
string MusicAlbum::getMusicAlbumTitle(){
return title;
}
int MusicAlbum::getMusicAlbumYear(){
return year;
}