void Data::init(int dd,int mm,int yy){}
(2)静态成员之间能够互相访问,包括静态成员函数访问静态数据成员和访问静态成员函数;ios
(3)非静态成员函数能够任意地访问静态成员函数和静态数据成员;函数
(4)静态成员函数不能访问非静态成员函数和非静态数据成员;优化
(5)因为没有this指针的额外开销,所以静态成员函数与类的全局函数相比,速度上会有少量的增加;this
(6)调用静态成员函数,能够用成员访问操做符(.)和(->)为一个类的对象或指向类对象的指调用静态成员函数。
url
Date &Date::add_year(int n){ if(d==29 && m==2 && ;leapyear(y+n)){ d=1; m=3; } y+=n; return *this; }
表达式中的 *this引用的就是找个函数的此次调用所针对的那个对象。大部分的this都是隐含的。对一个类中非静态的成员的引用都要依靠隐式的使用this。格式:this->变量名。。spa
table ::table(const table & t){ p=new name(sz=t.sz); for(int i=0;i<sz;i++)p[i]=t.p[i]; } table &table::operator=(const table& t){ if(this!=&t){//小心自赋值 t=t; delete [] p; p=new Name[sz=t.sz]; for(int i=0;i<sz;i++)p[i]=t.p[i]; } return *this; }
#include<iostream> #include<vector> #include<stdio.h> using namespace std; class club{ string name; Table members; Table ooficers; Data founded; club(const string &n,Data fd); }; club::club(const string &n,Data fd):name(n),members(),ooficers(),founded(fd){ }
对于没有默认构造函数的类的成员变量,或者是cosnt,引用类型的成员变量,咱们都要使用成员列表初始化的方式最好,它可以提升效率设计
void f(int i){ static table tal; if(i){ static table tbl2; } } int main(){ f(0); f(1); f(2); }
2.友元函数的使用指针
2.1友元函数的参数:code
由于友元函数没有this指针,则参数要有三种状况:对象
2.1.1 要访问非static成员时,须要对象作参数;
2.1.2 要访问static成员或全局变量时,则不须要对象作参数;
2.1.3 若是作参数的对象是全局对象,则不须要对象作参数;
2.2友元函数的位置
由于友元函数是类外的函数,因此它的声明能够放在类的私有段或公有段且没有区别。
2.3友元函数的调用
能够直接调用友元函数,不须要经过对象或指针
2.4友元函数的分类:
根据这个函数的来源不一样,能够分为三种方法:
2.4.1普通函数友元函数
2.4.1.1目的:使普通函数可以访问类的友元
2.4.1.2语法:
声明: friend + 普通函数声明
实现位置:能够在类外或类中
实现代码:与普通函数相同
调用:相似普通函数,直接调用
2.4.1.3代码:
class INTEGER
{
friend void Print(const INTEGER& obj);//声明友元函数
};
void Print(const INTEGER& obj)
{
//函数体
}
void main()
{
INTEGER obj;
Print(obj);//直接调用
}
2.4.2类Y的全部成员函数都为类X友元函数—友元类
2.4.2.1目的:使用单个声明使Y类的全部函数成为类X的友元,它提供一种类之间合做的一种方式,使类Y的对象能够具备类X和类Y的功能。
2.4.2.2语法:
声明位置:公有私有都可,常写为私有(把类当作一个变量)
声明: friend + 类名(不是对象哦)
2.4.2.3代码:
class girl;
class boy
{
public:
void disp(girl &);
};
void boy::disp(girl &x) //函数disp()为类boy的成员函数,也是类girl的友元函数
{
cout<<"girl's name is:"<<x.name<<",age:"<<x.age<<endl;//借助友元,在boy的成员函数disp中,借助girl的对象,直接访问girl的私有变量
}
class girl
{
private:
char *name;
int age;
friend boy; //声明类boy是类girl的友元
};
main函数就不写了和普通调用时同样的。
2.4.3类Y的一个成员函数为类X的友元函数
2.4.3.1目的:使类Y的一个成员函数成为类X的友元,具体而言:在类Y的这个成员函数中,借助参数X,能够直接以X的私有变量
2.4.3.2语法:
声明位置:声明在公有中 (自己为函数)
声明:friend + 成员函数的声明
调用:先定义Y的对象y---使用y调用本身的成员函数---本身的成员函数中使用了友元机制
2.4.3.3代码:
实现代码和2.4.2.3中的实现及其类似只是设置友元的时候变为friend void boy::disp(girl &);本身解决喽……
小结:其实一些操做符的重载实现也是要在类外实现的,那么一般这样的话,声明为类的友元是必须滴。
4.友元函数和类的成员函数的区别
4.1 成员函数有this指针,而友元函数没有this指针。
4.2 友元函数是不能被继承的,就像父亲的朋友未必是儿子的朋友。