c++的构造函数分为四种:
默认,自定义,赋值,拷贝
-
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;
注意:这个函数同拷贝函数
#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;
}
声明:其实后两个函数就是为了让对象里的指针,重新分配一块内存空间并赋值,再让其指针指向这块区域,就应该是要去定义的最重要原因