静态成员,友元,模板

静态成员

同类的多个成员实现数据共享(全局变量破坏封装性,但静态成员要注意作用域)

●静态数据成员

1.只能在类体外初始化,通过类名引用(而不是对象)

2.在类外可以用对象引用公共静态数据成员,也可用类名引用静态数据成员

3.私有静态数据成员必须通过公共成员函数引用(公共成员函数可以引用静态和非静态数据成员)

●静态成员函数

1.可被对象或者类调用(一般用类Box::)

2.静态成员函数没有this指针,故不能访问本类中的非静态成员,而主要用来访问静态数据成员

(若要调用,则应该用对象或者对象的引用做参数)


友元

1.友元函数

●友元函数

类外定义的普通函数作为类的友元,若要访问类中的私有数据,需要建立形参对象才能访问

friend void display(Time &);
void display(Time &t){cout << t.hour;}

●友元成员函数

Time的成员函数访问Date的数据成员

需要Date类的提前声明,类内此函数的友元类引用,友元类中的友元函数声明

class Date;

class Time

{public:

void display();

void display(Date &);}

class Date

friend void Time::display(Date &);}

void Time::display(Date &d)

{cout << d.month;}

t1.display();

t1.display(d1);//也要通过对象t1调用类中函数;

2.友元类

若类B是类A 的友元类,B中所有函数可以访问A中的数据成员

友元是封装的补充,一般不建议使用

单向性,不可传递

class Date;

class Time

{friendDate;

Public:…………}

总结:若B想访问A,那么A就必须在本类中声明friendB(函数或类),那么B就是A的友元

 

 

模板

首先看一下函数模板,T为数据类型

功能相同而数据类型不同的函数

Template<typename T>

T max(Ta, T b, T c){…returna;}

int i1=1,i2=2,i3=3,i;

i=max(i1,i2,i3);

类模板

功能相同而数据类型不同的

Template<typename T>

class Compare

{public:Compare(T a, T b);  T max();

private:T x, y;}

Compare<int>cmp(1,2);

注意:如果在类模板外定义成员函数,每个都要加template:

templare<typenameT>

void Compare<T>::display(){…………;}

说明

模板类型参数可以有多个,可以是类型也可以是参数

templare<typename T,typename N,int KV>

class Some;

Some<int, double,5>obj;


总结:

static :同类不同对象的共享数据

友元:类之间(或对函数)的定向共享

模板:数据类型或参数的参数化

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值