当前位置: 首页 > news >正文

杭州外贸网站长沙室内设计公司排名

杭州外贸网站,长沙室内设计公司排名,软件开发合同模板范本,wordpress 自己做主题文章目录 1.初始化列表2.static静态成员3.友元 1.初始化列表 我们知道在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。虽然调用构造函数之后,对象中已经有了一个初始值,但是不能将其称为对对象中成…

文章目录

  • 1.初始化列表
  • 2.static静态成员
  • 3.友元

在这里插入图片描述

1.初始化列表

我们知道在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。虽然调用构造函数之后,对象中已经有了一个初始值,但是不能将其称为对对象中成员变量的初始化,构造函数体中的语句只能将其称为赋初值,而不能称作初始化。因为初始化只能初始化一次,而构造函数体内可以多次赋值。

初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括号中的初始值或表达式。
如:

class Date
{
public:Date(int year, int month, int day)  //初始化列表: _year(year) , _month(month) , _day(day)
{}
private:int _year; int _month; int _day;
};

注意

  • 每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次)
  • 类中包含以下成员,必须放在初始化列表位置进行初始化:引用成员变量、const成员变量、自定义类型成员(且该类没有默认构造函数时)
  • 成员变量在类中声明次序就是其在初始化列表中的初始化顺序,与其在初始化列表中的先后次序无关
class A
{
public:A(int a):_a1(a) ,_a2(_a1)
{}
void Print() 
{ cout<<_a1<<" "<<_a2<<endl;
}
private:int _a2; int _a1;
};
int main() 
{ A aa(1);aa.Print();
}
A. 输出1  1
B.程序崩溃
C.编译不通过
D.输出1  随机值

选D选项,因为程序是先声明a2,所以在初始化列表里时先给a2初始化,此时a2(a1)中a1是随机值。

2.static静态成员

概念:声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;用 static修饰的成员函数,称之为静态成员函数。静态成员变量一定要在类外进行初始化 。

class A
{
public:A() 
{ ++_scount; 
} A(const A& t) 
{ ++_scount; 
} ~A() 
{ 	--_scount; 
} 
static int GetACount() 
{ return _scount; 
}
private:static int _scount;   //静态成员类里声明
};int A::_scount = 0; //静态成员类外初始化
void TestA()
{cout << A::GetACount() << endl; A a1, a2; A a3(a1); cout << A::GetACount() << endl;
}

静态成员特性

  1. 静态成员为所有类对象所共享,不属于某个具体的对象,生命周期在整个程序运行期间,存放在静态区
  2. 静态成员变量必须在类外定义,定义时不添加static关键字,类中只是声明
  3. 类静态成员即可用 类名::静态成员 或者 对象.静态成员 来访问
  4. 静态成员函数没有隐藏的this指针,不能访问任何非静态成员
  5. 静态成员也是类的成员,受public、protected、private 访问限定符的限制

3.友元

友元提供了一种突破封装的方式,有时提供了便利。但是友元会增加耦合度,破坏了封装,所以 友元不宜多用。友元分为:友元函数和友元类。

友元函数
问:现在尝试去重载operator<<,然后发现没办法将operator<<重载成成员函数。因为cout的 输出流对象和隐含的this指针在抢占第一个参数的位置。this指针默认是第一个参数也就是左操作 数了。但是实际使用中cout需要是第一个形参对象,才能正常使用。所以要将operator<<重载成 全局函数。但又会导致类外没办法访问成员,此时就需要友元来解决。

  • 友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在 类的内部声明,声明时需要加friend关键字。

注意

  1. 友元函数可访问类的私有和保护成员,但友元函数不是类的成员函数
  2. 友元函数不能用const修饰
  3. 友元函数可以在类定义的任何地方声明,不受类访问限定符限制
  4. 一个函数可以是多个类的友元函数
  5. 友元函数的调用与普通函数的调用原理相同

友元类
友元类的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类中的非公有成员。

  • 友元关系是单向的,不具有交换性。
  • 友元关系不能传递。
  • 友元关系不能继承,在继承位置再给大家详细介绍。
class Time
{friend class Date;   // 声明日期类为时间类的友元类,则在日期类中就直接访问Time类中的私有成员变量
public:Time(int hour = 0, int minute = 0, int second = 0) : _hour(hour) , _minute(minute) , _second(second)
{}
private:int _hour; int _minute; int _second;
};
class Date
{
public:Date(int year = 1900, int month = 1, int day = 1) : _year(year) , _month(month) , _day(day)
{}
void SetTimeOfDate(int hour, int minute, int second)
{
// 直接访问时间类私有的成员变量_t._hour = hour; _t._minute = minute; _t._second = second;
}
private:int _year; int _month; int _day;Time _t;
};
http://www.yayakq.cn/news/554656/

相关文章:

  • 网站首页不收录网站建设套定额
  • 网站域名需要购买吗可以把网站生成软件
  • 网站建设注意的问题怎样制作微信网站
  • 陕西省住房建设厅网站校史网站开发技术
  • 手机网站怎么建设小说推广赚钱平台
  • 新八建设集团网站搜索排名竞价
  • 新沂网站建设公司网站建设服装市场分析报告
  • 那个网站可以做图标亚马逊联盟wordpress插件
  • 网站视觉优化的意义招商加盟类网站模板
  • 微分销手机网站制作网络推广平台软件
  • 建立主题网站的知识点无锡编程培训机构
  • 站长素材网站官网江苏建设工程造价管理网站
  • 想学做网站从哪里入手网站是否需要备案
  • 哪家网站建设做网站 数据库
  • 顺德网站建设报价可以做申论的网站
  • 加盟网网站建设多用户wordpress主题
  • 衡阳市建设学校官方网站电商网站建设哪好
  • 实验一 电子商务网站建设与维护网络营销的基本流程
  • 做搜狗手机网站快在线crm管理系统
  • 上海 网站备案系统公司起名网站十大排名
  • 企业如何做网站推广宁波企业网站优化报价
  • 涿州做网站建设地方旅游网站怎么做
  • 如何制作自己的网站WordPress怎么设置2个菜单
  • 美食网站是怎么做的成都住建局官网查房源
  • 柳编网站建设意义国外活动策划网站
  • 学校网站建设目标解决wordpress打开慢的问题
  • 上海网站公司建设制作图片的软件加字
  • 苏州精品网站建设郑州网站建设网站开发
  • 河源市住房和城乡规划建设局网站博客自适应模板
  • 广州网站建设正一起买买买网站建设