나는 나의 대학에서 C++로 연습을했다. 그래서 그들은 복사 생성자와 오버로드 할당 연산자 =를 만들도록 요청했습니다. 그래서 내가 그랬고 괜찮 았어. 그들은 나에게 methos get()과 복사 생성자와 오버로드 할당 연산자에서 잘못되었다고 말했다. 불행히도 운동은 잘 진행되었습니다. 또한 그들은 main()을 요구하지 않았다.C++ 복사 생성자, 오버로드 할당 연산자, metho get()
#include <iostream>
using namespace std;
class DIcourse{
private:
int *ids;
int numstudents;
char *title;
char *description;
public:
DIcourse();
~DIcourse();
DIcourse(const DIcourse &tmp);
DIcourse operator=(const DIcourse &tmp);
int const get_num();
char const *get_title();
char const *get_description();
int const *get_ids();
int set_num_ids(int num);
char set_description(char *tmp);
char set_title(char *temp);
};
DIcourse :: DIcourse(){
ids=NULL;
numstudents=0;
title=new char[50];
description=new char[200];
}
DIcourse :: ~DIcourse(){
delete [] ids;
delete [] title;
delete [] description;
}
DIcourse :: DIcourse(const DIcourse& tmp){
numstudents=tmp.numstudents;
ids=new int[numstudents];
for(int i=0;i<numstudents;i++){
ids[i]=tmp.ids[i];
}
title=tmp.title;
description=tmp.description;
}
DIcourse DIcourse::operator=(const DIcourse &tmp){
delete [] ids;
numstudents=tmp.numstudents;
ids=new int[numstudents];
for(int i=0;i<numstudents;i++){
ids[i]=tmp.ids[i];
}
delete[] description;
delete[] title;
description= new char[200];
title= new char[50];
description=tmp.description;
title=tmp.title;
return *this;
}
const int DIcourse :: get_num(){
return numstudents;
}
const char* DIcourse :: get_title(){
return title;
}
const char* DIcourse :: get_description(){
return description;
}
const int* DIcourse :: get_ids(){
return ids;
}
int DIcourse :: set_num_ids(int num){
numstudents++;
int *temp_array;
temp_array=new int[numstudents];
temp_array[numstudents-1]=num;
if(ids!=NULL){
for(int i=0; i<numstudents-1; i++){
temp_array[i]=ids[i];
}
delete [] ids;
}
ids=temp_array;
}
char DIcourse :: set_description(char *tmp){
int i=0;
while(tmp[i]!='\0'){
description[i]=tmp[i];
i++;
}
description[i]='\0';
}
char DIcourse :: set_title(char *temp){
int i=0;
while(temp[i]!='\0'){
title[i]=temp[i];
i++;
}
title[i]='\0';
}
당신은 확실히 [_good_ 책] 읽어야합니다 (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list). 이것은 매우 나쁜 C++ 코드입니다. 그것은 장소의 포인터를 사용하고 예외 - 안전하지 않습니다. –
메모리 할당을 줄이고'char * '대신'std :: string'을 사용하십시오. –
@ThomasMatthews - 대학 운동이므로 동적 메모리 할당을 사용하는 방법을 배우는 것이 가치있는 일일 수 있습니다. –