Chapter 7. Function Overloading and Default Arguments
一、C++中的union
//unionclass.cpp
#include
using namespace std;
union u {
private:
int i;
float f;
public:
u(int a);
u(float b);
~u();
int read_int();
float read_float();
};
u::u(int a)
{
i = a;
}
u::u(float b)
{
f = b;
}
u::~u(void)
{
cout << "u::~u()\n"; } int u::read_int(void) { return i; } float u::read_float(void) { return f; } int main(void) { u X(12), Y(1.9F); cout <<>
这个例子展示了union的用法。union仍就是C++的关键词,union也和class一样,他也可以
有constructor,destructor,成员方法甚至访问控制。
union和class的不同之处在于:
1. union含有独特的数据存储方式。
2. union不能被继承,这也是由特性1决定的。这使得它在C++里无法大展身手。
二、匿名union
//supervar.cpp
#include
using namespace std;
class supervar {
enum {
character,
integer,
floating_point,
} vartype;
union { // anonymous union
char c;
int i;
float f;
};
public:
supervar(char ch);
supervar(int ii);
supervar(float ff);
void print();
};
supervar::supervar(char ch)
{
vartype = character;
c = ch;
}
supervar::supervar(int ii)
{
vartype = integer;
i = ii;
}
supervar::supervar(float ff)
{
vartype = floating_point;
f = ff;
}
void supervar::print(void)
{
switch (vartype) {
case character:
cout << "character: " <<>
1. class supervar定义了一个enum类型,但是没有给此类型标注类型名。因为他只是用此
enum定义了一个变量实例vartype.
2. class supervar定义了一个union类型成员,这是一个匿名union(anonymous union),这
样在此类的成员中应用union成员,将不必使用成员操作符`.'。
如果匿名union定义在文件类型,_一定_要声明为static,这样他就有了内部链接。
_
没有评论:
发表评论