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