曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 3238|回复: 0
打印 上一主题 下一主题

类与结构及联合的关系

[复制链接]

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
跳转到指定楼层
楼主
发表于 2011-8-11 20:10:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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;
}

运行输出:
$ ./structo
10
上面程序中,使用了 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;
}

运行输出:
$ ./unionto
X Y
上面程序使用联合来输出组成短整数的高字节与低字节。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-17 22:02 , Processed in 0.067015 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表