C++ 的结构也有面向对象的能力,结构中包含数据和函数。结构和类的区别是,在默认情况下,类中的成员是私有的,而结构中的成员是公有的。根据正式 C++ 的语法,定义一个结构实际上也就创建了一个类。
下面示例程序里结构使用了像类一样的特征:
[C++] 纯文本查看 复制代码 #include <iostream>
using namespace std;
struct c1 {
int get_i();
void put_i(int j); //默认情况下这些成员是公有的
private:
int i;
};
int c1::get_i()
{
return i;
}
void c1::put_i(int j)
{
i = j;
}
int main()
{
c1 s;
s.put_i(10);
cout << s.get_i() << "\n";
return 0;
}
运行输出:上面程序中,使用了 private 关键字声明类(结构)的私有成员。所以,结构中的 i 变量被显式的声明为私有成员,否则默认就是公有成员。
一般习惯上,会用 class 来定义一个包含成员函数的对象,而使用 struct 来定义只包含成员变量的对象---这是 struct 的传统特色,这种特色正是对 C 的一种继承。结构和类是如此的相像,看上去还有点冗余,这是因为 C++ 派生于 C,这是满足向后兼容的体现。
实际上,联合与类也是相关的。联合的本质上也是类,只不过是所有的数据成员(不包括函数成员)都保存在相同的地址上罢了。联合体除了可以包含成员函数外,还可以包含构造函数和析构函数。和结构类似,在默认情况下,联合中的成员是公有的,而不是私有的。示例程序如下:
[C++] 纯文本查看 复制代码 #include <iostream>
using namespace std;
union u_type {
u_type (short int a);
void showchars();
short int i;
char ch[2];
};
u_type::u_type(short int a)
{
i = a;
}
void u_type::showchars()
{
cout << ch[0] << " ";
cout << ch[1] << "\n";
}
int main()
{
u_type u(22872);
u.showchars();
return 0;
}
运行输出:上面程序使用联合来输出组成短整数的高字节与低字节。 |