-
友元全局函数 需要在类中将全局函数声明为友元, 友元成员函数,需要两个类才可实现, 总之友元随提供了访问数据的方便,同时也可能破坏数据的封装性!!查看全部
-
1)必须在类的说明中说明友元函数,说明时以关键字friend开头,后跟友元函数的函数原型,友元函数的说明可以出现在类的任何地方,包括在private和public部分; 2)注意友元函数不是类的成员函数,所以友元函数的实现和普通函数一样,在实现时不用"::"指示属于哪个类,只有成员函数才使用"::"作用域符号; 3)友元函数不能直接访问类的成员,只能访问对象成员, 4)友元函数可以访问对象的私有成员,但普通函数不行; 5)调用友元函数时,在实际参数中需要指出要访问的对象, 6)类与类之间的友元关系不能继承。 7)一个类的成员函数也可以作为另一个类的友元,但必须先定义这个类。查看全部
-
vector常用函数查看全部
-
朋友关系,体现在函数上就是友元函数,体现在类上,就是友元类。全局函数声明为友元,就是友元全局函数 友元的关键字是:friend 友元函数其实就是一个函数的声明,同时一定要传入当前这个类的一个对象或者是一个引用或者是它的指针,总之就是要能够通过这个函数,访问到这个对象当中私有的数据成员,或者是保护的数据成员 传递引用或者是指针,它的传递速度更快,执行效率更高,不提倡直接传入对象的方式 友元会破坏封装性查看全部
-
记忆方法查看全部
-
1、类中一般会包括它的函数成员和数据成员; 2、要在类外实现类的函数成员前面需要加上template<typename T>和类名<模板参数>查看全部
-
加了引用才能实际交换两个数。引用传递是直接找内存地址,对地址对应的值进行操作,变了就变了。用指针也可以做到。如果不加是按值传递,交换的是临时变量 函数结束后变量就没有,传人的两个数并没有交换值,它们的地址还是放着原来的数。查看全部
-
多看几遍查看全部
-
运算符重载的时候可以用this指针,也可以不用 定义的时候使用引用的好处:取了一次负号,可以再取负号,即为可以多次取用 友元函数的重载,后面的括号内,一定要填写东西,普通函数的重载可以不写 一元运算符重载 一.成员函数的负号运算符重载 1.声明部分:因为每次取反后返回的坐标(即对象)是它本身,所以此重载在类中要用引用去声明;//Coordinate& operator-(); 2.定义部分:就是对其坐标取负值赋给本身,返回this指针指向的值(默认指针参数this指向部分) Coordinate&Coordinate::operator-() { m_iX=-m_iX或this->m_iX=-(this->m_iX); m_iY=-m_iY或this->m_iX=-(this->m_iY); return *this; } 3.调用部分:实例化一个对象,对对象取反(其实是调用负号运算符重载),然后打印出来; 例:Coordinate coor(1,3); cout<<coor.getX()<<","<<coor.getY()<<endl;//打印出横纵坐标 -coor;//其实是调用运算符重载coor.operator-();//因为采用引用可以二次取反,负负得正 -(-coor); cout<<coor.getX()<<","<<coor.getY()<<endl;//打印出取反后的横纵坐标 4.无运算符重载时,不能对对象取反(因为计算机不能识别负号) 二.友元函数的负号运算符重载 1.声明部分:要用friend关键字,参数原本是默认参数this指向部分,此时也可实例化一个对象或引用//friend Coordinate& operator-(Coordinate &c); 2.定义部分:不用类的作用域标识符::(因为友元函数是独立于类外的),且此时this变成对象c; Coordinate&operator-(Coordinate& c) { c.m_iX=-c.m_iX; c.m_iY=-c.m_iY; return c; } 3.调用部分:同上查看全部
-
定义静态成员函数和静态数据成员都需要static关键字。 静态数据成员不能在构造函数初始化,必须单独初始化查看全部
-
不能在静态成员函数后面加const因为静态成员函数没有this指针,而在成员函数后面加const是将该成员函数的this指针变成const指针。查看全部
-
注意事项: 一)静态数据成员必须单独初始化,因为他并不随着对象的产生而产生,随着类的产生而产生,所以说类产生后对象还没有实例化之前就应该有一个初值,所以不能写到构造函数中,而应该写到类的外边直接进行初始化。 二)作为静态数据成员不能调用非静态数据成员或成员函数。反之这可以。 三)静态数据成员只有一份,不依赖对象而存在。查看全部
-
静态数据成员:并不依赖于对象,而是依赖于类。即使我们不实例化对象,静态数据成员任然在内存当中存在,普通数据成员必须在实例化对象之后才能存在。因为静态数据成员并不依赖于对象的实例化,因而静态的数据成员并不会在构造函数中去实例化,他的实例化往往是单独进行的,在伪静态数据成员实例化时不用再加static关键字了直接 数据类型+类名+两个冒号+数据名称。 静态数据成员(成员函数)的访问方法有两种:一)不通过对象,通过类直接访问 类名+::+(静态)数据成员(成员函数)。 二)通过对象,对象+.+(静态)数据成员(成员函数)。 内存当中普通数据成员和静态数据成员的区别: 一)普通数据成员在定义多个对象时,诞生了每个对象对应的数据成员,但是在这四个普通数据成员诞生之前,静态数据成员已经诞生而且只诞生一次当实例化多个对象时,静态数据成员的数值会变化但是静态成员的个数不会发生变化。 二)我们可以用普通成员函数调用静态数据成员(静态成员函数)因为静态成员函数和静态数据成员并不与对象相关,而是与与类相关因此无需this指针去指定他是那个对象的;不能用静态成员函数调用普通成员函数。因为this指针的原因,因为静态成员函数没有this指针,因为在调用普通成员函数或数据成员时不能确定调用的到底是哪个对象数据成员,因而会发生错误。查看全部
-
静态数据成员和静态成员函数的的定义。查看全部
-
友元的声明不受访问限定符的影响,可以声明在类的任何位置。 类具有单向性A是B的友元,B不一定时A的友元。查看全部
举报
0/150
提交
取消