类和对象下篇

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新的初始化方式:在成员变量声明时,给一个缺省值
此处声明的缺省值只有在没有其他值可选时,才会用
//

友元函数和友元类
友元函数的声明:
//此函数可以访问当前类的私有成员
//此函数是一个普通函数,不使用类的成员函数
//友元的声明可以放在类的任何地方,不影响使用

猜你喜欢

转载自blog.csdn.net/qq_43609421/article/details/114330345