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 ...
随机推荐
- 用python实现哈希表
哈哈,这是我第一篇博客园的博客.尝试了一下用python实现的哈希表,首先处理冲突的方法是开放地址法,冲突表达式为Hi=(H(key)+1)mod m,m为表长. #! /usr/bin/env py ...
- WPF自定义控件(三)——Window
一样!先来看看效果吧: 怎么样?效果很好吧,而且不只是样式哟!所有系统窗体有的交互操作都可以实现! 但可惜...有很多和系统API有关的东西本人了解得并不多,所以这个窗体是基于他人的成果上产生的.关于 ...
- nginx服务器绑定域名和设置根目录
首先进入nginx安装目录的配置目录conf,然后执行 vi conf/nginx.conf 打开nginx的配置文件,找到并修改红字部分 server { listen default_server ...
- SQL的自增列如何重置
第一种方法:首先去除该列自增的标识,然后再修改id的值,成功修改后,再加上自增标识:如果不修改自增标识,会报错:“无法更新标识列”. 第二种方法:删除该自增列,而后重建一个自增列.
- Go在linux下的安装
在Ubuntu.Debian 或者 Linux Mint上安装Go语言 下面是在基于Debian的发行版上使用apt-get来安装Go语言和它的开发工具. $ sudo apt-get install ...
- 【原创】jQuery插件 - Booklet翻书特效教程(一) 一般设置
jQuery插件 - Booklet翻书特效教程(一) 一般设置 本文由五月雨恋提供,转载请注明出处. 一.宽高(width/height) 1.自定义大小 $(function(){ // 自定义页 ...
- C#在Winform中改变Textbox高度三种方法
最近在做C# Winform项目,需要有一个能动态调整大小的Textbox,并且要是单行的.试了几次,单行模式的Textbox不能直接改高度.于是搜索了一下,整理出几个改变高度的方法. 1.将Text ...
- ASP.Net MVC4 登录
一月之前,工作室师兄给我们介绍博客,然后试着去申请了一个,一直不晓得更新什么,直到今天,才有了一点小想法.最近在做一个小网站,然后就在登录那一块犯愁了,止步不前. 以前对登录一直没有什么概念,以为登录 ...
- 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
// test14.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...
- C#常用简单线程实例
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...