for循环:十分简化,另外注意auto的用法:自动 推断类型。2,用于返回值占位
vector<int> numNatural;
for(auto item:numNatural)
{
cout<<item<<endl;
}
关于常对象(在定义对象时将对象指定为const,不可更改对象)
1,数据成员的值都不能修改
2,不可调用非const成员函数,因为怕利用这个函数修改成员变量。。。换言之,常对象只能调用const成员函数
3,要想引用类中的成员数据,则将成员函数设为const便可以引用,但是不能修改成员数据
4,对于常对象中想要修改的成员数据,将其声明为mutable便可以在声明为const的函数中修改其值
友元函数与友元类
对于将普通函数声明为友元函数来说:
1,友元函数可以在类中声明,返回值3类型前加friend
2,友元函数必须要有形参,并且是类(友元函数不属于这个类)的引用,因为友元函数操作类的私有成员数据只能通过类的对象来操作
将另一个类的成员函数声明为友元函数
1,类的提前引用,即在定义一个类之前,要先将用到友元函数所在的类声明
2,总结出,不论是普通函数的友元函数,还是一个类中将成员函数作为另一个的友元函数,其目的都是想通过这个友元函数去访问其他类的私有成员数据(当然是通过类的对象来访问)
3,只有在类正式声明后,才能对这个类定义类对象
4,一个函数(成员函数或者普通函数可以声明为多个类的友元函数)
友元类:
总体来说,友元类的所有成员函数都可以访问对其友好的类中的成员数据
7.26
1,在C++中,声明一个类对象时,就实例化了它,问题:若声明一个类指针呢?关于初始化的问题,可以直接指向类中成员吧,进行赋值操作:
Time *p;
p = new Time;
p->hour = 15;
7.27
指针初始化的问题:
2,关于静态成员函数与静态成员变量(概念:只要是静态的则代表其属于整个类,而不是某个对象,对于整个类来说是唯一的)
(1)静态成员变量的初始化应放类外。必须初始化,且不该加限定符
(2)静态成员变量是在本类与其派生类中共享的,基类对象与派生类对象均可访问
(3)静态成员变量类型可以为所属类的类型,普通数据成员智能声明为所属类型的引用与指针
(4)对于静态变量来说,不需要实例化类,它就存在了,因此,这就是为什么静态成员函数只能访问静态成员变量的原因
静态成员函数:
(1)静态成员函数不可以调用非静态成员,因为没有this指针,如果要访问成员变量,可以在参数中传入对象,通过对象访问私有和公有成员
(2)静态成员函数不可以同时声明为virtual,const,volatile函数
(3)静态函数可以独立访问,就是不通过类对象也可以访问
(4)之前一直分不清楚普通的static函数与static成员函数。其实这是两个概念。普通的static函数只能在本文件中调用,不能跨文件调用,与它相反的是extern函数,这个函数可以跨文件访问
总结:调用一个类的普通成员函数当然需要通过一个对象或者指针。
问题:
vector<int> numNatural;
for(auto item:numNatural)
{
cout<<item<<endl;
}
关于常对象(在定义对象时将对象指定为const,不可更改对象)
1,数据成员的值都不能修改
2,不可调用非const成员函数,因为怕利用这个函数修改成员变量。。。换言之,常对象只能调用const成员函数
3,要想引用类中的成员数据,则将成员函数设为const便可以引用,但是不能修改成员数据
4,对于常对象中想要修改的成员数据,将其声明为mutable便可以在声明为const的函数中修改其值
友元函数与友元类
对于将普通函数声明为友元函数来说:
1,友元函数可以在类中声明,返回值3类型前加friend
2,友元函数必须要有形参,并且是类(友元函数不属于这个类)的引用,因为友元函数操作类的私有成员数据只能通过类的对象来操作
将另一个类的成员函数声明为友元函数
1,类的提前引用,即在定义一个类之前,要先将用到友元函数所在的类声明
2,总结出,不论是普通函数的友元函数,还是一个类中将成员函数作为另一个的友元函数,其目的都是想通过这个友元函数去访问其他类的私有成员数据(当然是通过类的对象来访问)
3,只有在类正式声明后,才能对这个类定义类对象
4,一个函数(成员函数或者普通函数可以声明为多个类的友元函数)
友元类:
总体来说,友元类的所有成员函数都可以访问对其友好的类中的成员数据
7.26
1,在C++中,声明一个类对象时,就实例化了它,问题:若声明一个类指针呢?关于初始化的问题,可以直接指向类中成员吧,进行赋值操作:
Time *p;
p = new Time;
p->hour = 15;
7.27
指针初始化的问题:
定义一个类的指针后,只是随机开辟了一块空间,但是开发者并不知道这个地址在哪里,而且随机开辟的这块空间很可能开辟在已被占用的内存上,因此可能会报错,因此需要初始化,如果new了一个类对象,在最后还要释放该指针,并将指针指向空
2,关于静态成员函数与静态成员变量(概念:只要是静态的则代表其属于整个类,而不是某个对象,对于整个类来说是唯一的)
(1)静态成员变量的初始化应放类外。必须初始化,且不该加限定符
(2)静态成员变量是在本类与其派生类中共享的,基类对象与派生类对象均可访问
(3)静态成员变量类型可以为所属类的类型,普通数据成员智能声明为所属类型的引用与指针
(4)对于静态变量来说,不需要实例化类,它就存在了,因此,这就是为什么静态成员函数只能访问静态成员变量的原因
静态成员函数:
(1)静态成员函数不可以调用非静态成员,因为没有this指针,如果要访问成员变量,可以在参数中传入对象,通过对象访问私有和公有成员
(2)静态成员函数不可以同时声明为virtual,const,volatile函数
(3)静态函数可以独立访问,就是不通过类对象也可以访问
(4)之前一直分不清楚普通的static函数与static成员函数。其实这是两个概念。普通的static函数只能在本文件中调用,不能跨文件调用,与它相反的是extern函数,这个函数可以跨文件访问
总结:调用一个类的普通成员函数当然需要通过一个对象或者指针。
问题:
1,为何基类中的析构函数要定义为虚函数?
答:若基类中的析构函数未被定义为虚函数,则当基类指针指向子类对象时,不会调用子类对象的析构函数,子类的资源没有被释放,会造成内存泄露。