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
};
SingleDog.cpp*
#include "SingleDog.h"
#include <iostream>
#include <cstring>
using namespace std;
int SingleDog::count = 0; //类中的静态变量此处无需前缀static
SingleDog::SingleDog(int id_, char* name_):id(id_){
name = new char[21];
strcpy(name,name_);
count++;
}
SingleDog::SingleDog(const SingleDog &other):id(other.id){
name = new char[21]; //char*是内存分配
strcpy(name,other.name);
count++;
}
SingleDog::~SingleDog(){
delete []name;
count--;
};
int SingleDog::getCount(){
//同样,类中的静态函数此处无需前缀static
return count;
}