我们用军事为例,要完成一次作战,需要侦察、后勤保障、战略部署、战术部署...等等
在c语言中我们学习过struct,而在c++中,struct升级成了类。现在struct中不止能定义变量,还能定义函数。
class 类名
{
// 类体:由成员函数和成员变量组成
};//分号不能漏
class a
{
public:
int add(int x,int y)
{
return x+y
}
int b;
int c;
}
//声明放在.h文件中
class a
{
public:
int add(int x,int y);
int b;
int c;
}
//定义放在.cpp中
int a::add(int x,int y)
{
return x+y;
}
推荐使用第二种定义方法
从该访问限定符出现的位置到下一访问限定符或者到类结束的位置
默认成员函数:用户没有显示实现,编译器会自动生成的成员函数。
Date(int year, int month, int day)//日期类的构造函数
{
if (month > 12 || month < 1 || (day > GetMonthDay(year,month) || day < 1))
{
cout<<"非法日期"< }
cout << "Date(int year, int month, int day)" << endl;
_year = year;
_month = month;
_day = day;
}
class Date
{
public:
Date(int year, int month, int day)
: _year(year)
, _month(month)
, _day(day)
{
//函数体内容(可以不填)
}
}
class Date
{
public:
Date(int year, int month = 0, int day = 0)
: _year(year)
, _month(month)
, _day(day)
{
//函数体内容(可以不填)
}
}
~Date()//析构函数
{
cout << "~Date()" << endl;
_year = 0;
_month = 0;
_day = 0;
}
Date(const Date& d)//拷贝构造
{
_year = d._year;
_month = d._month;
_day = d._day;
}
//
Date& Date:: operator+=(int day)
{
int maxDay = GetMonthDay(_year, _month);
_day += day;
while (_day > maxDay)
{
_month++;
_day -= maxDay;
if (_month > 12)
{
_year++;
_month = 1;
}
}
return *this;
}
//
Date Date::operator+(int day)
{
Date tmp = *this;
tmp += day;
return tmp;
}
//
Date& Date::operator-= (int day)
{
while (day)
{
if (_day - day < 1)
{
day -= _day;
_month--;
if (_month < 1)
{
_month = 12;
_year--;
}
_day = GetMonthDay(_year, _month);
}
else
{
_day -= day;
break;
}
}
return *this;
}
//
Date Date::operator-(int day)
{
Date tmp = *this;
tmp -= day;
return tmp;
}
//
Date& Date:: operator++()//前置++
{
_day++;
if (_day > GetMonthDay(_year, _month))
{
_day = 1;
_month++;
if (_month > 12)
{
_month = 1;
_year++;
}
}
return *this;
}
Date Date::operator++(int)//后置++
{
Date tmp = *this;
++(* this);
return tmp;
}
Date& Date::operator--()//前置--
{
_day--;
if (_day < 1)
{
_month--;
if (_month < 1)
{
_month = 12;
_year--;
}
_day = GetMonthDay(_year, _month);
}
return *this;
}
//
Date Date::operator--(int)
{
Date tmp = *this;
--(*this);
return tmp;
}
//
bool Date::operator>(const Date& d)
{
if (_year > d._year)
{
return true;
}
else if (_year == d._year && _month > d._month)
{
return true;
}
else if (_year == d._year && _month == d._month && _day > d._day)
{
return true;
}
return false;
}
//
bool Date::operator==(const Date& d)
{
return (_year == d._year && _month == d._month && _day == d._day);
}
//
bool Date::operator>=(const Date& d)
{
return ((*this) > d || (*this) == d);
}
//
bool Date::operator<(const Date& d)
{
return !((*this) > d || (*this) == d);
}
//
bool Date::operator<=(const Date& d)
{
return (*this) < d || (*this) == d;
}
//
bool Date::operator!=(const Date& d)
{
return!((*this) == d);
}
//
int Date::operator-(const Date& d)
{
Date max = *this;
Date min = *this;
if (max < d)
{
max = d;
}
if (min > d)
{
min = d;
}
for (int i = 0; 1; i++)
{
if ((min += 1) == max)
{
return i+1;
}
}
}
void Print() const
1. void Print() const
2. void Print()
这两个函数构成重载,当我们将this展开,答案显而易见
1. void Print(const Date* this)
2. void Print(Date* this)
class Solution
{
private:
static int _ret;
static int _i;
};
int Solution::_ret = 0;
int Solution::_i = 1;
class Solution
{
friend A(int a);//友元的声明
private:
int _ret;
int _i;
};
Solution s;
void A(int a)//友元函数
{
printf(“%d”,s._i);
}
class Solution
{
public:
class Sum
{
public:
Sum()
{
_ret += _i;
_i++;
}
};
int Sum_Solution(int n)
{
Sum a[n];
return _ret;
}
private:
static int _ret;
static int _i;
};
class Solution
{
Solution()
{
cout << "Solution" << endl;
}
private:
int _ret;
int _i;
};
Solution()//匿名对象,声明周期就只有定义的这一行