参考书籍:面向对象程序设计案例精析
主要是实现构造函数和成员函数的实现,同时本人进行了改化,加入了深复制的东西,相关的练习程序如下:
一、主函数cat_main.cpp
#include "cat.h"
int main(int argc,char argv)
{
Cat cat("MaoMi");
cat.talk();
cat.eat(10);//吃了十点食物
cat.drink(5); //喝了五升水
cat.talk();
return 0;
}
二、头文件(cat.h)
#ifndef CAT_H_INCLUDED
#define CAT_H_INCLUDED
//定义一个cat类
class Cat
{
public:
Cat(); //无参数的构造函数
Cat(const char *name); //初始化成员列表
Cat(const Cat & p); //复制构造函数
~Cat(); // 析构函数
//以下是成员函数
void PrintName();
void talk();
void eat(int f);
void drink(int d);
private:
char *name; //cat的名字
int food;
int water;
};
#endif
三、资源文件:cat.cpp
#include "cat.h"
#include "string"
#include "iostream"
using namespace std;
Cat::Cat() //无参数的构造函数
{
name = new char[10];
strcpy(name,"Maomi");
food =0;
water =0;
}
Cat::Cat(const char *name):food(0),water(0) //构造函数,含有参数
{
this->name =new char[strlen(name)+1];
strcpy(this->name,name);
}
Cat::Cat(const Cat &p)
{
name =new char[strlen(p.name)+1];
strcpy(name,p.name);
food = p.food;
water = p.water;
}
Cat::~Cat()
{
delete []name;
name = NULL;
}
void Cat::PrintName()//打印猫的名字
{
cout << "The name of the cat is :" << name<< endl;
}
void Cat::talk()
{
cout << "Miao~Wu,I'm" << name <<"."<<endl; //一只会叫的猫
cout << "food = "<< food<<endl;
cout << "water=" <<water<<endl;
}
void Cat::eat(int f)
{
food +=f;
}
void Cat::drink(int d)
{
water+=d;
}
运行结果: