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

网络公司网站设计方案ppt免费p站推广网站入口

网络公司网站设计方案ppt,免费p站推广网站入口,网站建设的策划,wordpress汉化广告插件在上一篇中提到了构造函数,那么这篇再来提一下构造函数,编译器自动生成的默认构造函数对于内置类型不做处理,自定义类型会调用它自己的构造函数。对于自己写的构造函数,之前是在函数体中初始化,当然不止这一种初始化&a…

在上一篇中提到了构造函数,那么这篇再来提一下构造函数,编译器自动生成的默认构造函数对于内置类型不做处理,自定义类型会调用它自己的构造函数。对于自己写的构造函数,之前是在函数体中初始化,当然不止这一种初始化,还有初始化列表的方式进行初始化,那么为什么可以在函数体中初始化还需要初始化列表呢?咱接着往下看!

目录

构造函数:初始化列表

explicit关键字 

Static成员 

友元 

友元函数

 友元类

内部类 


构造函数:初始化列表

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

class Date{public:Date(int year, int month, int day): _year(year), _month(month),_day(day){}private:int _year;int _month;int _day;};

以日期类来看,在之前是在函数体中对对象的成员进行赋值,而初始化列表和其有一样的作用,当然只看初始化内置类型肯定是不行,这样觉得和在函数体中初始化没什么区别,那么如果是对自定义类型和const修饰类型和引用呢,在函数体中还能初始化吗?

对于自定义类型,初始化列表时可以自己写也可以不写,因为编译器会自动调用自定义类型自己的构造函数进行初始化。const修饰的变量和引用在定义时就需要初始化,而如果是在函数体中去初始化是会报错的,所以只能使用初始化列表来对其初始化。

示例:

class A
{
public:A(int a):_a(1){cout << "A" << endl;}
private:int _a;
};class B {
public:B(int a, int& ref):_ref(ref),_n(a),_ab(a){}
private:A _ab;//特征: 必须在定义的时候初始化int& _ref;const int _n;
};
int main()
{int n = 10;B a(10, n);return 0;
}

在这段代码中有自定义类型,引用,const成员变量三个成员变量, 那么我们看一下是否对其初始化了:

 通过调试可以看出是我们想要的结果。

需要注意的是:

1. 每个成员变量在初始化列表中最多只能出现一次(初始化只能初始化一次)

2. 类中包含以下成员,必须放在初始化列表位置进行初始化:

引用成员变量

const成员变量

自定义类型成员(且该类没有默认构造函数时)

3、尽量使用初始化列表初始化,因为不管你是否使用初始化列表,对于自定义类型成员变量,一定会先使 用初始化列表初始化。

4、成员变量在类中声明次序就是其在初始化列表中的初始化顺序,与其在初始化列表中的先后次序无关

 示例:

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();
}

各位可以看看输出结果是什么? 先说答案 输出结果为1 和随机值 ,那么为什么是1和随机值呢?

这就和初始化的顺序有关了,初始化列表初始化的顺序和初始化列表中的顺序无关,而是和声明的顺序有关 ,在这题中,_a2先声明,所以初始化时先对_a2初始化,但是在初始化列表中把_a1 的值给了_a2,所以_a2为随机值,在对_a1初始化,所以_a1的值为1。

运行结果:

explicit关键字 

构造函数不仅可以构造与初始化对象,对于接收单个参数的构造函数,还具有类型转换的作用。接收单个参 数的构造函数具体表现:

1. 构造函数只有一个参数

2. 构造函数有多个参数,除第一个参数没有默认值外,其余参数都有默认值

3. 全缺省构造函数

示例:

class A{public:/*explicit A(int a):_a(a){cout << "A(int a)" << endl;}*/A(int a):_a(a){cout << "A(int a)" << endl;}A(const A& aa):_a(aa._a){cout << "A(const A& aa)" << endl;}private:int _a;};int main(){A aa1(1);A aa2 = 2;return 0;}

在没有explicit修饰的情况下,A aa2 = 2 会进行隐式类型转换,整型转换为自定义类型,2构造一个A的临时对象(临时对象具有常性),临时对象再拷贝构造aa2 -->优化用2直接构造。

在explicit修饰的情况下,以上转换就不能进行。

运行结果:

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;
}

静态成员变量需要在类外面定义,想要不通过对象来访问成员函数可以用static来修饰成员函数,就可以访问该成员函数。 

特性:

1. 静态成员为所有类对象所共享,不属于某个具体的对象,存放在静态区

2. 静态成员变量必须在类外定义,定义时不添加static关键字,类中只是声明

3. 类静态成员即可用 类名::静态成员 或者 对象.静态成员 来访问

4. 静态成员函数没有隐藏的this指针,不能访问任何非静态成员

5. 静态成员也是类的成员,受public、protected、private 访问限定符的限制 

友元 

友元函数

在实现日期类时,对于输入输出日期不能简单的使用流提取和流插入,而是需要重载该两个运算符,因为正常的流提取和流插入达不到预期效果。cout的输出流对 象和隐含的this指针在抢占第一个参数的位置。this指针默认是第一个参数也就是左操作数了。但是实际使用 中cout需要是第一个形参对象,才能正常使用。所以要将operator重载成全局函数。但又会导致类外没办 法访问成员,此时就需要友元来解决。

示例:

class Date
{friend ostream& operator<<(ostream& _cout, const Date& d);friend istream& operator>>(istream& _cin, Date& d);
public:Date(int year = 1900, int month = 1, int day = 1): _year(year), _month(month), _day(day){}private:int _year;int _month;int _day;
};ostream& operator<<(ostream& _cout, const Date& d)
{_cout << d._year << "-" << d._month << "-" << d._day;return _cout;
}istream& operator>>(istream& _cin, Date& d)
{_cin >> d._year;_cin >> d._month;_cin >> d._day;return _cin;
}int main()
{Date d;cin >> d;cout << d << endl;return 0;
}

上述代码对<< 和>> 重载来实现日期类的输入输出,在类中声明两个函数为友元函数,便可以访问类的私有成员变量 。

注意:

友元函数可访问类的私有和保护成员,但不是类的成员函数

友元函数不能用const修饰

友元函数可以在类定义的任何地方声明,不受类访问限定符限制

一个函数可以是多个类的友元函数

友元函数的调用与普通函数的调用原理相同

 友元类

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

友元关系是单向的,不具有交换性。 友元关系不能传递 如果B是A的友元,C是B的友元,则不能说明C时A的友元。

友元类的声明和友元函数的声明一样,加friend修饰。

内部类 

概念:如果一个类定义在另一个类的内部,这个内部类就叫做内部类。内部类是一个独立的类,它不属于外 部类,更不能通过外部类的对象去访问内部类的成员。外部类对内部类没有任何优越的访问权限。

内部类是外部类的天生友元,内部类可以访问外部类的私有变量,但是外部类不可以访问内部类的私有变量。

特性:

1. 内部类可以定义在外部类的public、protected、private都是可以的。

2. 注意内部类可以直接访问外部类中的static成员,不需要外部类的对象/类名。

3. sizeof(外部类)=外部类,和内部类没有任何关系。

示例:

class A {
public:class B {public:void Fun(const A& a){cout << a._a << endl;}};
private:int _a;
};int main()
{A::B bb;bb.Fun(A());
}
http://www.dtcms.com/wzjs/155680.html

相关文章:

  • 微信小程序后端开发流程厦门网站推广优化哪家好
  • 潍坊网站建设工作室短视频seo推广
  • 网站建设与维护实训总结网络推广的方式和途径有哪些
  • edm营销优化大师如何删掉多余的学生
  • 查询网站备案密码是什么情况江苏seo网络
  • 公司网站建设是什么意思如何自己做网站
  • 网站开发者排名网页设计案例
  • wordpress 站外搜索阐述网络营销策略的内容
  • 青龙网站建设网络营销的公司有哪些
  • 网站psd切图做响应式效果网络营销公司经营范围
  • 微网站ui多少钱学seo如何入门
  • 建网站用营业执照吗google下载
  • 模板网站可以优化吗整站外包优化公司
  • 做海报创客贴同类网站微信引流的十个方法
  • 广东企业网站seo报价推广代理平台登录
  • 互联网兼职做网站维护媒体发布平台
  • 公司做网站有意义么磁力搜索引擎
  • 宠物网站开发与实现seo优化几个关键词
  • 移动互联时代网站建设镇江关键字优化品牌
  • 红酒网站建设超级外链工具
  • iis网站发布教程服务器域名查询
  • 射阳网站建设腾讯广告投放推广平台
  • 金阊公司网站建设电话直通车推广怎么做
  • 用凡科网建设的网站和用dreamweaver建设的网站有什么不一样电商怎么做?如何从零开始学做电商赚钱
  • 政府职能网站建设潍坊网站关键词推广
  • 域名备案时网站名字线上营销策略都有哪些
  • 企业网站建设市场报价网页设计需要学什么
  • 网站建设服务器都有哪些营销型网站建设怎么做
  • 免费商城系统网站建设seo是什么意思 seo是什么职位
  • 西安网站建设电话站长之家端口扫描