构造函数constructor
- 构造函数(构造器),对象创建时自动调用,一般用于完成对象的初始化工作
- 构造函数:函数名和类名一样,没有返回值
#include <iostream>
using namespace std;
struct Person {
int m_age;
Person() { //这个就是构造函数,会自动调用
m_age = 0; //
cout << "Person()" << endl;
}
};
int main() {
Person person; //这里只是定义对象,它就自己调用了构造函数
Person person2;
Person person3;
getchar();
return 0;
}
#include <iostream>
using namespace std;
struct Person {
int m_age;
Person() { //这个就是构造函数,会自动调用
m_age = 0; //
cout << "Person()" << endl;
}
};
int main() {
Person *p = new Person; //new对象的会调用构造函数
delete p;
Person *p = (Person *) malloc(sizeof(Person)); //malloc申请的不能调用构造函数,这是C语言时代用的函数
p->m_age = 10;
free(p);
getchar();
return 0;
}
struct Person {
int m_age;
Person() {
memset(this, 0, sizeof(Person));
}
};
析构函数Destructor
- 也叫析构器,在对象销毁时自动调用,一般用于完成对象的清理工作
struct Person {
int m_age;
// 用来做初始化的工作
Person() {
cout << "Person::Person()" << endl;
}
// 用来做内存清理的工作
~Person() { //这就是析构函数,死了善后的函数
cout << "~Person" << endl;
}
};
struct Person {
int m_age;
Car *m_car;
// 用来做初始化的工作
Person() {
m_age = 0;
m_car = new Car(); //这里向堆空间new了空间,需要写回收的代码清理掉,如果没有就发生内存泄露
cout << "Person::Person()" << endl;
}
// 用来做内存清理的工作
~Person() { //这就是析构函数,死了善后的函数
delete m_car; //销毁堆空间,防止内存泄露
cout << "~Person" << endl;
}
};
声明与实现分离
class Person { //只声明
private:
int m_age;
public:
void setAge(int age);
int getAge();
Preson();
~Person();
};
void Person::setAge(int age) { //类的实现
m_age = age;
}
int Person::getAge(int age) { //类的实现
return m_age;
}
Person::Person() {
m_age = 0;
}
Person::~Person() {
m_age = 0;
}
int main() {
getchar();
return 0;
}
- 头文件(源文件)-右键添加类:头文件有声明,源文件有实现