本文已参与「新人创作礼」活动,一起开启掘金创作之路。
游戏开发之类的构造函数和析构函数(C++基础)
构造函数主要作用在于创建对象时为对象的成员属性赋值, 构造函数由编译器自动调用, 无须手动调用。 析构函数主要用于对象销毁前系统自动调用, 执行一些清理工作。 构造函数语法: 构造函数函数名和类名相同, 没有返回值, 不能有void,但可以有参数。 类名(形参列表){函数体} 析构函数语法: 析构函数函数名是在类名前面加”~”组成,没有返回值, 不能有 void,不能有参数, 不能重载。 ~类名(){函数体}
类的构造函数按照参数类型分类:分为无参构造函数和有参构造函数。
1.类的构造函数和析构函数声明及定义
class A
{
public:
//构造函数权限一般是public类型的,如果不是,则无法直接创建类对象
//如果没有书写构造函数,编译器会帮我们自动创建一个构造函数。如果我们自己书写了构造函数,编译器不会生成默认构造函数
//构造函数是没有返回值类型的并且在构造函数中最好只做一些简单的初始化操作
//默认构造函数
//语法:类名(){函数体}
A()
{
std::cout << "默认构造调用" << std::endl;
p = new int;
}
int *p;
//析构函数在释放对象的内存之前自动调用
//它的作用一般是来释放在类内部申请的一些内存空间(如堆区)
//析构函数有且仅有一个
//~类名(){函数体}
~A()
{
std::cout << "析构函数调用" << std::endl;
delete p;
}
private:
int a;
int b;
};
int main()
{
if (true)
{
A a;
}
A a1;
return 0;
}
2.构造函数可以带有参数及设置默认值
有参构造函数在创建对象时同时初始化对象且是可以重载的。 语法:类名(参数列表){函数体}
class A
{
public:
//构造函数权限一般是public类型的,如果不是,则无法直接创建类对象
//如果没有书写构造函数,编译器会帮我们自动创建一个构造函数。如果我们自己书写了构造函数,编译器不会生成默认构造函数
//构造函数是没有返回值类型的并且在构造函数中最好只做一些简单的初始化操作
//默认构造函数
//语法:类名(){函数体}
A()
{
std::cout << "默认构造调用" << std::endl;
p = new int;
}
int *p;
//析构函数在释放对象的内存之前自动调用
//它的作用一般是来释放一些在类内部申请的一些内存空间
//析构函数有且仅有一个
//~类名(){函数体}
~A()
{
std::cout << "析构函数调用" << std::endl;
delete p;
}
//有参构造函数在创建对象时同时初始化对象
//且是可以重载的
//语法:类名(参数列表){函数体}
A(int a_,int b_)
{
a = a_;
b = b_;
std::cout << "2个参数" << std::endl;
}
A(int a_)
{
a = a_;
b = 0;
std::cout << "1个参数" << std::endl;
}
//构造函数可以设置默认值
A(char b, int a_ = 200)
{
a = a_;
std::cout << "有1个默认参数" << std::endl;
}
private:
int a;
int b;
};
int main()
{
if (true)
{
A a;
}
A a1;
A a1(1, 2);
A a2(1);
A a3('b');
A a4;
return 0;
}
版本声明:本文为CSDN博主[ufgnix0802]的原创文章。
原文链接:(blog.csdn.net/qq135595696…)