class Time
{
public
Time(int hour,int minute,int second)
:_hour(hour)
,_minute(minute)
,_second(second)
private:
class Date
{
public:
Date(int year,int month,int day)
//const,引用必须在定义的时候初始化
//初始化列表:真正初始化的位置
//const,引用成员必须在初始化列表中进行初始化
//const,引用成员定义的地方为初始化列表
:_year(year)
,_month(month)
,_day(day)
,_hour(12)
{
//并不是初始化
/*_year=year;
_month(month)
_day(day)
}
private:
int& _year;
int& _month;
int& _day;
const int _hour;
};
三类成员必须在初始化列表中进行初始化
引用,const,没有默认构造的自定义成员
class A
{
public:
//初始化列表中初始化顺序:按照声明顺序,并不是初始化列表中的书写顺序
A(int a)
:_a1(a)
,_a1(_a2)
{
}
void Print(){
cout<<_a1<<""<<_a2<<endl;
}
private:
int _a2;
int _a1;
};
void test(){
A aa(1);
aa.Print();
void test()
{
A
单参构造的隐式类型转换
运用创建完成的对象进行赋值
通过添加 explicit 将隐式类型转换进行屏蔽
2.static成员
类的静态成员 用static修饰的成员变量,称为静态成员变量 用static修饰的成员变量函数称为静态成员变量函数
class A
{
public:
A()
{
++_count;
}
A(const A&())
{
++_count;
}
private:
//static成员是所有对象共享
//static成员变量,必须在类外初始化
static int _count;
};
int A::_count =0;
A funA(A a)
{
return a;
}
void test()
{
A a1;
A a2;
A a3=funA(a1);
}
//this指针的意义:执行当前调用此函数的对象
//static成员函数不包含this指针
//static函数可以通过类名访问,通过类名访问时,没有对象,this没有指向
static int getCount()
{
//缺少this指针,不能调用非static成员函数
//fun();
return _count;
}
//普通成员函数包含this指针
void fun()
{
//可以调用static成员函数
this->getCount ();
cout<<“fun()”<<endl;
}
//C++11新的初始化方式:在成员变量声明时,给一个缺省值
此处声明的缺省值只有在没有其他值可选时,才会用
//
友元函数和友元类
友元函数的声明:
//此函数可以访问当前类的私有成员
//此函数是一个普通函数,不使用类的成员函数
//友元的声明可以放在类的任何地方,不影响使用