#include<iostream>
#include<Windows.h>
using namespace std
;
class Animal{
public:
Animal();
Animal(int age
,int weight
,const char *add
);
Animal(const Animal
&);
Animal
& operator=(const Animal
&);
~Animal();
int getweight();
int getage();
char* getaddr();
void setaddr(const char *add
);
private:
int weight
;
int age
;
char* addr
;
};
Animal
::Animal() {
age
= 28;
weight
= 100;
addr
= new char[64];
strcpy_s(addr
,64,"zoo");
}
Animal
::Animal(int age
, int weight
,const char *add
) {
this->age
= age
;
this->weight
= weight
;
addr
= new char[64];
strcpy_s(addr
, 64, add
);
}
Animal
& Animal
::operator=(const Animal
&pig
) {
if (this == &pig
) {
return *this;
}
age
= pig
.age
;
weight
= pig
.weight
;
addr
= new char[64];
strcpy_s(addr
, 64, pig
.addr
);
}
Animal
::Animal(const Animal
&pig
){
age
= pig
.age
;
weight
= pig
.weight
;
addr
= new char[64];
strcpy_s(addr
, 64, pig
.addr
);
}
Animal
::~Animal() {
delete addr
;
}
int Animal
::getweight() {
return weight
;
}
void Animal
::setaddr(const char *add
) {
addr
= new char[64];
strcpy_s(addr
,64,add
);
}
int Animal
::getage() {
return age
;
}
char* Animal
::getaddr() {
return addr
;
}
int main() {
Animal pig
;
cout
<< pig
.getaddr() << endl
;
pig
.setaddr("NBA");
cout
<< pig
.getaddr() << endl
;
system("pause");
return 0;
}
Animal(); //默认的构造函数 用法:Amimal pig;
Animal(int age,int weight,const char *add); //自定义参数函数’ 用法: Amimal pig(16,299,“nba”);
Animal(const Animal&); //拷贝构造函数 用法 : Amimal tiger(pig); Animal tiger=pig; 注意:如果不定义构造函数,用这两种方法也是调用拷贝函数 但是是浅拷贝 即里面的指针是指向原来的地方 而不是重新分贝一块内存,如果定义过拷贝函数,就可以自己设为分配一块内存空间在指向这块内存空间
Animal& operator=(const Animal&); //赋值构造函数 用法:Amimal tiger,pig; tiger =pig; 注意:这个函数同拷贝函数
声明:其实后两个函数就是为了让对象里的指针,重新分配一块内存空间并赋值,再让其指针指向这块区域,就应该是要去定义的最重要原因