-
++ 运算符的重载:包括前置重载和后置重载。 前置重载:与之前相同; 后置重载: class Coordinate: { Coordinate operator++(int) { Coordinate old(*this);//将this指针的值赋到old; m_iX++; m_iY++; return old; //使用时仍然是old,使用完就++; } }; 一元运算符重载:<br> 1.一元运算符:比如正号,或者负号,一个操作符只操作一个数字。<br> 2.一元运算符重载:包括成员函数重载和友元函数的重载。<br> 成员函数: <br> class coordinate :<br> {<br> public:<br> xxx& operator-() //关键字 operator;<br> {<br> m_iX = -m_iX;<br> m_iY = - m_iY;<br> return *this; //隐形传入了一个this指针;<br> }<br> private:<br> int m_iX;<br> int m_iY;<br> };<br> 使用的时候: -coor1;//相当于coordinate.operator-();<br> <br> 2.友元函数重载<br> <br> class Coordinate :<br> {<br> friend Coordinate& operator-(Coordinate &coor) //不隶属于任何一个类;<br> {<br> return coor;<br> }<br> };<br> <br> 使用的时候 : -coor;//相当于operator-(coor);查看全部
-
静态成员函数只能访问静态数据成员和调用静态成员函数 定义静态成员函数和静态数据成员都需要static关键字。 公有静态成员函数可以被类直接调用。 静态数据成员不能在构造函数初始化,必须单独初始化。查看全部
-
static注意事项: 1.静态数据成员不依赖构造函数初始化,必须在类外单独初始化(因为它不是随着对象的产生而产生(即不是依赖构造函数初始化),而是随着类的产生而产生(即类产生后未实例化对象时它在内存中已经存在),而此时对象还未产生所以不依赖构造函数) //普通的数据成员和成员函数依赖于对象(即依赖构造函数初始化),创建对象后才存在 2.静态成员函数不能调用非静态成员函数和非静态数据成员 反之非静态成员函数能调用静态成员函数和静态数据成员及非静态的方法和属性(因为静态的成员函数不隐含this指针,无法知道去找哪个对象) 3.静态成员函数的声明和定义,声明的时候有static 关键字,定义时没有该关键字;静态数据成员前面也加关键字static 4.静态数据成员只有一份,且不依赖对象而存在(因为用sizeof求对象大小时不包含静态数据成员) 5.访问静态数据成员及静态成员函数时用类名Tank::getCount(),此时是初始化的值;用实例化对象t访问静态数据成员及成员函数时t.getCount(); 静态成员函数不能修饰为const,const的本质是对非静态成员函数隐含的this指针指向的值加以修饰。而静态成员函数不隐含this指针。查看全部
-
与数据成员类似,成员函数也可以定义为静态的,在类中声明函数的前面加static就成了静态成员函数。如 static int volume( ); 和静态数据成员一样,静态成员函数是类的一部分,而不是对象的一部分。 如果要在类外调用公用的静态成员函数,要用类名和域运算符“::”。如 Box::volume( ); 实际上也允许通过对象名调用静态成员函数,如 a.volume( ); 但这并不意味着此函数是属于对象a的,而只是用a的类型而已。 与静态数据成员不同,静态成员函数的作用不是为了对象之间的沟通,而是为了能处理静态数据成员。 我们知道,当调用一个对象的成员函数(非静态成员函数)时,系统会把该对象的起始地址赋给成员函数的this指针。而静态成员函数并不属于某一对象,它与任何对象都无关,因此静态成员函数没有this指针。既然它没有指向某一对象,就无法对一个对象中的非静态成员进行默认访问(即在引用数据成员时不指定对象名)。 可以说,静态成员函数与非静态成员函数的根本区别是:非静态成员函数有this指针,而静态成员函数没有this指针。由此决定了静态成员函数不能访问本类中的非静态成员。 静态成员函数可以直接引用本类中的静态数据成员,因为静态成员同样是属于类的,可以直接引用。在C++程序中,静态成员函数主要用来访问静态数据成员,而不访问非静态成员查看全部
-
友元的声明不受访问限定符影响,可以声明在类中的任何位置。 友元具有单向性,A是B的友元,B不一定是A的友元。 友元函数和友元类必须使用关键字friend定义。 友元不具有传递性查看全部
-
注:由于编译器不同,友元类有两种写法。 1、friend class 类名; 2、friend 类名;查看全部
-
#ifndef TIME_H #define TIME_H class Match; class Time { friend Match; public: Time(int hour,int min,int sec); private: void printTime(); int m_iHour; int m_iMinute; int m_iSecond; }; #endif #include"Time.h" #include<iostream> #include<stdlib.h> using namespace std; Time::Time(int hour,int min,int sec) { m_iHour=hour; m_iMinute=min; m_iSecond=sec; } void Time::printTime () { cout<<m_iHour<<":"<<m_iMinute<<":"<<m_iSecond<<endl; } #ifndef MATCH_H #define MATCH_H #include"Time.h" class Match { public: Match(int hour,int min,int sec); void testTime(); private: Time m_tTimer; }; #endif #include"Match.h" #include<iostream> using namespace std; Match::Match(int hour,int min,int sec):m_tTimer(hour,min,sec) { } void Match::testTime () { m_tTimer.printTime (); cout<<m_tTimer.m_iHour <<":"<<m_tTimer.m_iMinute <<":"<<m_tTimer.m_iSecond <<endl; } 定义类友元时,需要在原类头声明目标类(需要调用的函数所属类),同时在目标类头声明原类;在目标类中声明原类为 friend+类名。原类中,定义一个成员为目标类,作为目标类的初始化与传入参数。查看全部
-
友元类的定义和友元函数的定义非常的相似 要定义友元类,就要在被友元的这个类的前面,声明一下要定义的友元类,声明的时候只要有class关键字和友元类名就行 友元关系不可传递 友元关系的单向性,A是B的朋友,B不一定是A的朋友查看全部
-
代码。查看全部
-
友元函数的参数列表必须是类的对象、引用或指针 友元函数的括号内一定要有东西 传入对象的引用,函数的声明和定义写法:void display(Coordinate &coor)查看全部
-
friend与public、private、protected不构成约束条件,friend写在哪里都可以 友元函数可以是自己类中的,也可以是其他类中的成员函数变成友元函数,友元函数要定义在被友元的类中,这样才能访问被友元的类中的数据成员查看全部
-
朋友关系,体现在函数上就是友元函数,体现在类上,就是友元类。全局函数声明为友元,就是友元全局函数 友元的关键字是:friend 友元函数其实就是一个函数的声明,同时一定要传入当前这个类的一个对象或者是一个引用或者是它的指针,总之就是要能够通过这个函数,访问到这个对象当中私有的数据成员,或者是保护的数据成员 传递引用或者是指针,它的传递速度更快,执行效率更高,不提倡直接传入对象的方式 友元会破坏封装性查看全部
-
友元函数可以理解为基友函数。它是为了作为一个类的“伙伴”存在从而调用它的“基友类”的对象,使得类的成员的访问更加多样化、多元化查看全部
-
映射的遍历查看全部
-
迭代器相当于一个指针。查看全部
举报
0/150
提交
取消