Description
As we all know, there are many single dogs in SYSU, especially in SDCS. Now let’s create a class named SingleDog to represent them and count the number of existing dogs.
Detail
The SingleDog
has two member:
* id–the identifier of a SingleDog
, once a dog is created, its identifier can’t be changed any more(so it is const
);
* name–the name of a SingleDog.
You should manage the memory to store the name by yourself.
And there is a static member–count
. It’s used to count the number of existing dog. If a new dog is created, we increase it. If a dog is destroyed, we decrease it. You should initialize it with 0
.
You can read the SingleDog.h
to know more detail. (=_=)
Sample Input
2
I_love_TA
helloworld
Sample Output
Number of SingleDog: 3
SingleDog 1. My name is I_love_TA
Number of SingleDog: 3
SingleDog 2. My name is helloworld
Number of SingleDog: 1
SingleDog 0. My name is wangwang
Provided Codes
main.cpp
#include "SingleDog.h"
void printCount() {
cout << "Number of SingleDog: " << SingleDog::getCount() << endl;
}
int main() {
char name[20] = "wangwang";
int num;
cin >> num;
SingleDog dog(0, name), *p;
for (int i = 1; i <= num; ++i) {
cin >> name;
SingleDog a(i, name);
if (i % 2 != 0) {
p = new SingleDog(i, name);
printCount();
p->print();
delete p;
} else {
SingleDog b(a);
printCount();
b.print();
}
}
printCount();
dog.print();
return 0;
}
SingleDog.h
#include <iostream>
using namespace std;
class SingleDog {
public:
//constructor
SingleDog(int id_, char* name_);
//copy constructor
SingleDog(const SingleDog &other);
//desctructor
~SingleDog();
//return the count of single dog
static int getCount();
//print some infomation
void print() const {
cout << "SingleDog " << id << ". My name is " << name << endl;
}
private:
const int id;
char *name;
static int count; // the count of single dog
};
Submission
SingleDog.cpp
#include <iostream>
#include <string.h>
#include "SingleDog.h"
using namespace std;
int SingleDog::count=0;
int SingleDog::getCount(){
return count;
}
SingleDog::SingleDog(int id_, char* name_):
id(id_)
{
name=new char[20];
strcpy(name,name_);
count++;
}
SingleDog::SingleDog(const SingleDog &other):
id(other.id)
{
name=new char[20];
strcpy(name,other.name);
count++;
}
SingleDog::~SingleDog(){
delete []name;
count--;
}
Standard Answer
SingleDog.cpp
#include "SingleDog.h"
#include <cstring>
SingleDog::SingleDog(int id_, char* name_) : id(id_) {
name = new char[strlen(name_)+1];
strcpy(name, name_);
count++;
}
SingleDog::SingleDog(const SingleDog &other) : id(other.id) {
name = new char[strlen(other.name)+1];
strcpy(name, other.name);
count++;
}
SingleDog::~SingleDog() {
delete []name;
name = NULL;
count--;
}
int SingleDog::getCount() {
return count;
}
int SingleDog::count = 0;