构造函数
就是个初始化函数
class Entity
{
public:
int X,Y;
void print()
{
std::cout<<X<<","<<Y<<std::endl;
}
};
int mian()
{
Entity e;
e.Print();
std::cin.get();
}
控制台显示出
现实的是一个随机值,我们并未对起进行初始化,这对我们来说是不好的一个随机的数如果进行运算溢出就会造成不小的bug。所以我们希望其初始化为0.
class Entity
{
public:
int X,Y;
void print()
{
std::cout<<X<<","<<Y<<std::endl;
}
void Init()
{
x = 0;
y = 0;
}
};
int mian()
{
Entity e;
e.Init();
e.Print();
std::cin.get();
}
加上了初始化函数Init(),然而每次我们创建一个实例时就要复制一次Init()麻烦死了,所以。
class Entity
{
public:
int X,Y;
void print()
{
std::cout<<X<<","<<Y<<std::endl;
}
Entity()
{
X = 0;
Y = 0;
}
};
int mian()
{
Entity e;
e.Print();
std::cin.get();
}
“构造函数”就十分有必要,其名称与类名字相同,除了在main中不需要再被引用外,与Init函数功能相同。
Entity()
{
X = 0;
Y = 0;
}
对于这个代码我们还可以空着
Entity()
{
}
他的作用与上一个是相同的,默认所有变量赋值为0,很人性化是不是。
我们还可以对构造函数删除操作
class Entity
{
public:
int X,Y;
void print()
{
std::cout<<“do something”<<std::endl;
}
Entity()
{
}
};
int mian()
{
Entity e;
e.Print();
std::cin.get();
}
对于Entity这个类,我只想让用户使用print函数,不可以对其建立实例,那么
class Entity
{
public:
int X,Y;
void print()
{
std::cout<<“do something”<<std::endl;
}
Entity() = delete;
};
int mian()
{
Entity::Print();
std::cin.get();
}
如果使用Entity e;程序就会报错,这就是管理员权限~~~~~~
函数重载
class Entity
{
public:
int X,Y;
void print()
{
std::cout<<X<<","<<Y<<std::endl;
}
Entity()
{
X = 0;
Y = 0;
}
Entity(int x,int y)
{
X = x;
Y = y;
}
};
int mian()
{
Entity e;
e.Print();
Entity b(10,20);
b.Print();
std::cin.get();
}
在构造函数里我们可以重复使用它,不过需要输入的参数不同类型,如上图的第一个传进参数为空第二个传进参数为xy
控制台打印为
0,0
10,20
这就是函数重载。
在c#和java中,会自动将变量初始化为0。然而C++不会,所以我们必须手动初始化,而构造函数就极大地便利了我们。
析构函数
~Entity()
{
}
构造函数与析构函数就是双胞胎,成对出现,构造函数负责初始化,析构函数负责在函数结束时清除内存。
class Entity
{
public:
int X,Y;
void print()
{
std::cout<<X<<","<<Y<<std::endl;
}
Entity()
{
X = 0;
Y = 0;
}
~Entity()
{
std::cout<<“destroyed Entity”<std::endl;
}
};
int mian()
{
Entity e;
e.Print();
std::cin.get();
}
然而我们运行却只能打印
0,0
原因是析构函数只有在退出函数作用域时候才起效果,就是说main函数结束才打印
destroyed Entity。为了观察到destroyed Entity我们建立函数Function。
class Entity
{
public:
int X,Y;
void print()
{
std::cout<<X<<","<<Y<<std::endl;
}
Entity()
{
X = 0;
Y = 0;
}
~Entity()
{
std::cout<<“destroyed Entity”<std::endl;
}
};
void Function()
{
Entity e;
e.Print();
}
int mian()
{
Function();
std::cin.get();
}
打印
0,0
destroyed Entity
Function函数在销毁时执行了析构函数,然后执行std::cin.get();等待回车。