C++编程思想 第1卷 第8章 常量 类 类里的const 内建类型的”构造函数”

随着语言的发展以及人们为使用户定义类型看起来像内建类型一样所作的努力,
有时似乎内建数据类型看起来像用户定义类型更好
构造函数初始化列表里,可以把一个内建类型看成好像有一个构造函数

 

//: C08:BuiltInTypeConstructors.cpp
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt
#include <iostream>
using namespace std;

class B {
  int i;
public:
  B(int ii);
  void print();
};

B::B(int ii) : i(ii) {}
void B::print() { cout << i << endl; }

int main() {
  B a(1), b(2);
  float pi(3.14159);
  a.print(); b.print();
  cout << pi << endl;
  getchar();
} ///:~

 

初始化const数据成员时很关键,因为它们必须进入函数体前被初始化

还可以把这个内建类型的"构造函数扩展为一般的情形"
float pi(3.14159) 相当于 构造函数,赋值扩展一般的情形


输出
1
2
3.14159


把一个内建类型封装在一个类里保证用构造函数初始化,这是很有用的

 

//: C08:EncapsulatingTypes.cpp
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt
#include <iostream>
using namespace std;

class Integer {
  int i;
public:
  Integer(int ii = 0);
  void print();
};

Integer::Integer(int ii) : i(ii) {}
void Integer::print() { cout << i << ' '; }

int main() {
  Integer i[100];
  for(int j = 0; j < 100; j++)
    i[j].print();
  getchar();
} ///:~

 

在mian()中的Integer数组元素都自动初始化为0
与for循环和memset()相比,这种初始化并不必付出更多的开销
编译器可以很容易把它优化成一个很快的过程

输出
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值