class Date
{
private:
int _year;
int _month;
int _day;
public:
Date(int year,int month,int day)
{
this->_year = year;
this->_month = month;
this->_day = day;
}
};
this指针
不可在实参和形参中显示使用this指针,可在函数体中显示使用
this指针存储在栈中
成员函数(包含构造函数,析构函数,拷贝构造函数,赋值重载函数)
构造函数
函数名与类名相同,无返回值,自动调用,可重载,若不写编辑器会自动生成一个(一般不使用)
默认构造函数指不传实参就可调用的构造函数
class Date
{
private:
int _year;
int _month;
int _day;
public:
Date(int year=1, int month=1, int day=1)
{
this->_year = year;
this->_month = month;
this->_day = day;
}
};//全缺省的构造函数,使用次数较多
#include<iostream>
using namespace std;
typedef int STDataType;
class Stack
{
public:
Stack(int n = 4)
{
_a = (STDataType*)malloc(sizeof(STDataType) * n);
if (nullptr == _a)
{
perror("malloc申请空间失败");
return;
}
_capacity = n;
_top = 0;
}
private:
STDataType* _a;
size_t _capacity;
size_t _top;
};
// 两个Stack实现队列
class MyQueue
{
public:
private:
Stack pushst;会调用Stack的构造函数
Stack popst;
//int size;
};
//int main()
//{
// MyQueue mq;
// //Stack st1;
// //Stack st2;
//
// return 0;
//}
构造函数与析构函数的调用顺序是相反的,析构函数后面创建的先调用
大多数情况下需自己写,少数如MyQueue且Stack有默认构造时,可自动调用
析构函数(进行对象中的资源清理释放工作)
在类名前加上字符~,无参无返回值,对象生命周期结束后自动调用
// ...
~Stack()
{
free(_a);
_a = nullptr;
_top = _capacity = 0;
}
运算符重载
作为成员函数时,第一个运算对象默认传给隐式的this指针,
所以运算符重载为成员函数时的参数比运算对象少一个
class Student
{
int id;
string name;
public:
Student(int a,string b):id(a),name(b){}
int operator==(const Student& s)
{
if (this->id == s.id && this->name == s.name)
return 1;
else
return 0;
}
};
int operator==(const Student& s1, const Student& s2)
{
.......
}