构造函数、析构函数
#include<iostream>
using namespace std;
#include<string>
#include <ctime>
class person
{
public:
person(int a, int b, int c) :m_a(a), m_b(b), m_c(c) {}
void printp()
{
cout << m_a << m_b << m_c << endl;
}
private:
int m_a;
int m_b;
int m_c;
};
int main()
{
/*构造函数初始化,析构函数清理
构造函数:类名(){}
1.没有返回值也不写void
2.函数名称和类名相同
3.可以有参数,因此可以重载
4.创建对象时,构造函数会自动调用,而且只调用一次
析构函数:
1.没有返回值也不写void
2.函数名称和类名相同,名称前加~
3.没有参数,因此不可以重载
4.销毁对象时,析构函数会自动调用,而且只调用一次
构造函数分类和调用有参构造和无参构造
拷贝构造函数 per(const per &p)
调用:1.括号法:per p0 默认构造函数调用;per p1(10)有参构造函数调用; per p2(p1)拷贝构造函数
显示法:per p0; per p2=per(10); per p3=per(p2)
隐式转换法:per p2=10;//相当于写了per p2=per(10),有参构造
per p5=p4;//拷贝构造
构造函数的调用规则:
1.创建一个类,c++编译器会给每个类都添加至少3个函数:默认构造(空实现)、析构函数(空实现)、拷贝构造(值拷贝)
2.如果写了有参构造函数,编译器不会在提供默认构造,依然提供拷贝构造
初始化列表,用来初始化属性,语法:构造函数():属性1(值1),属性2(值2)...{}
当其他类对象作为本类成员,构造时候先构造类对象,在构造自身,析构的顺序与构造相反
静态成员函数:所有对象共享同一个函数 静态成员函数只能访问静态成员变量。访问方式通过类名/通过对象
成员变量和成员函数分开存储的。非静态成员变量属于类的对象上,静态成员变量,不属于类对象上,非静态成员函数,不属于类对象上,静态成员函数,也不属于类对象上
空对象内存占1个字节
this指针指向被调用的成员函数所属的对象上
1.解决名称冲突
2.返回对象本身用*this
const修饰成员函数
常函数:void per() const {},常函数内不可以修改成员属性,成员属性声明时加关键字mutable,在常函数中依然可以修改
常对象:const per p;常对象只能调用常函数
*/
person p(10, 2, 3);
p.printp();
system("pause");
return 0;
}