C++:用成员初始化列表对数据成员初始化
1、在声明类时,对数据成员的初始化工作一般在构造函数中用赋值语句进行。
例如:
class Complex{
private:
double real;
double imag;
public:
Complex(double r,double i) //声明构造函数原型
{
...........
}
};
Complex::Complex(double r,double i) //在构造函数中用赋值语句对数据成员赋初值
{
real = r;
imag = i;
}
2、另一种初始化数据成员的方法---用成员初始化列表来实现对数据成员的初始化
带有成员初始化列表的构造函数的一般形式如下:
类名::构造函数名([参数表]):[(成员初始化列表)]
{
构造函数体
}
成员初始化列表的一般形式为:
数据成员名1(初始值1),数据成员名2(初始值2),...........
例如:
class Complex{
private:
double real;
double imag;
public:
Complex(double r,double i) //声明构造函数原型
{
.............
}
};
Complex::Complx(double r,double i):real(r),imag(i)//用形参r的值初始化数据成员real,用形参i的值初始化数据成员imag
{
}
3、对于用const修饰的数据成员,或是引用类型的数据成员,是不允许在构造函数中用赋值
语句直接赋值的,而是采用成员初始化列表对其进行初始化。
例:用成员初始化列表对引用类型的数据成员和const修饰的数据成员初始化。
#include<iostream>
using namespace std;
class A{
public:
A(int x1):x(x1),rx(x),pi(3.14) //用成员初始化列表对引用类型的数据成员rx和const修饰的数据成员pi初始化
{ }
void print()
{
cout<<"x = "<<x<<" "<<"rx = "<<rx<<" "<<"pi = "<<pi<<endl;
}
private:
int x;
int ℞ //rx是整型变量的引用
const double pi; //pi是用const修饰的常量
};
int main()
{
A a();
a.print();
return ;
}
例: 用成员初始化列表对数据成员进行初始化
#include<iostream>
using namespace std;
class D{
public:
D(int i):mem2(i),mem1(mem2+) //用成员初始化列表对数据成员进行初始化
{
cout<<"mem1:"<<mem1<<endl;
cout<<"mem2:"<<mem2<<endl;
}
private:
int mem1;
int mem2;
};
int main()
{
D d();
return ;
}
/*注意:规定数据成员是按照它们在类中声明的顺序进行初始化的,数据成员mem1应在mem2
之前被初始化。因此,在mem2尚未初始化时,mem1使用“mem2+1”的来初始化,所得结果是
随机的,而不是16。
*/
C++:用成员初始化列表对数据成员初始化的更多相关文章
- 正确理解Widget::Widget(QWidget *parent) :QWidget(parent)这句话(初始化列表中无法直接初始化基类的数据成员,所以你需要在列表中指定基类的构造函数)
最近有点忙,先发一篇我公众号的文章,以下是原文. /********原文********/ 最近很多学习Qt的小伙伴在我的微信公众号私信我,该如何理解下面段代码的第二行QWidget(parent) ...
- C++使用初始化列表的方式来初始化字段
几个月之前,接触Android recovery源代码的时候,看ScreenRecoveryUI类的时候,那时候C++基础还不是特别好,一直不明白以下的初始化方式: 下面这个是Recovery的一个构 ...
- Cocos2d-x 3.1.1 学习日志3--C++ 初始化类的常量数据成员、静态数据成员、常量静态数据成员
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u011292087/article/details/37598919 有关const成员.stati ...
- c++构造函数成员初始化中赋值和初始化列表两种方式的区别
先总结下: 由于类成员初始化总在构造函数执行之前 1)从必要性: a. 成员是类或结构,且构造函数带参数:成员初始化时无法调用缺省(无参)构造函数 b. 成员是常量或引用:成员无法赋值,只能被初始化 ...
- C++的成员初始化列表和构造函数体(以前未知)
成员的初始化列表和构造函数在对成员指定初值方面是不一样的.成员初始化列表是对成员初始化,而构造函数,是对成员赋值 成员初始化列表使用初始化的方式来为数据成员指定初值, 而构造函数的函数体是通过赋值的方 ...
- 为什么static数据成员一定要在类外初始化?(转)
1.避免重复定义和初始化 <<c++ primer>>说在类外定义和初始化是保证static成员变量只被定义一次的好方法. 但,为什么static const int就可以在类 ...
- 【C++】类的特殊成员变量+初始化列表
参考资料: 1.黄邦勇帅 2.http://blog.163.com/sunshine_linting/blog/static/448933232011810101848652/ 3.http://w ...
- static数据成员与const数据成员的定义与初始化
三种数据类型的初始化 1.static int a 的初始化 const int a 的初始化 static const int a的初始化 三种初始化方式 在类外初始化 在构造函数中通过初始化列表初 ...
- 从零开始学C++之构造函数与析构函数(二):初始化列表(const和引用成员)、拷贝构造函数
一.构造函数初始化列表 推荐在构造函数初始化列表中进行初始化 构造函数的执行分为两个阶段 初始化段 普通计算段 (一).对象成员及其初始化 C++ Code 1 2 3 4 5 6 7 8 9 1 ...
随机推荐
- selenium-webdriver用例批量运行和测试套件使用 ------之我见
用例批量运行和测试套件使用 ------之我见 学习selenium-webdriver已经一段时间了,最近学习到,测试用例的批量执行,和测试套件的使用,有点自己的理解,不晓得对不对,希望大家指正! ...
- Sublime Text博客插件 --- iblog
iblog是一款 sublime 博客插件,目前只支持cnblog. 项目地址:https://github.com/iskeeter/iblog 功能介绍 新建和更新cnblog的博客 支持mark ...
- Microsoft Azure 全球状态
除了mooncake的中国大陆区域 Azure status http://azure.microsoft.com/en-us/status/?rnd=1#current http://azure.m ...
- CHARINDEX,PATINDEX,STUFF函数
-- CHARINDEX函数 -- 返回字符或者字符串在另一个字符串中的起始位置. -- 语法:CHARINDEX(expression1 , expression2 [,start_location ...
- 与MySQL交互(felixge/node-mysql)
目录 简介和安装 测试MySQL 认识一下Connection Options MYSQL CURD 插入 更新 查询 删除 Nodejs 调用带out参数的存储过程,并得到out参数返回值 结束数据 ...
- matlab实现的嵌套乘法、高精度、二分法
嵌套乘法的计算: \[ P(x) = 1 - x + x^2 - x^3 + ...+ x ^ {98} - x^{99} \] function y = nest( d, c, x, b ) if ...
- Excel取消保护密码
Excel表被保护了, 如果没有密码, 可通过以下宏代码查看 (Office 2013已测) Option Explicit Public Sub AllInternalPasswords()' Br ...
- Laravel5 路由问题 /home页面无法访问
参考网址:http://stackoverflow.com/questions/11791375/laravel-routes-not-working Laravel5 路由问题 /home页面无法访 ...
- MYSQL存储过程实现in传入参数 where in('1','2')
android 服务器端开发中遇到这么一个问题: 突然发现将字符串传入到存储过程,参数为 '1','2' ,竟然执行无效 所以看到网上有在存储过程中直接拼凑sql的代码,今天也试了一下,可以执行了, ...
- Android开发应用异步检查更新代码
开发环境:android studio sdk 4.0及以上 场景:用户点击检查更新按钮进行检查服务器版本号,若有新版本则进行下载更新.异步检测版本号 package com.example.q ...