C++类和C结构体类型的异同

Posted LC编程开发者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++类和C结构体类型的异同相关的知识,希望对你有一定的参考价值。

C++类和C结构体类型的异同

       C++增加了class类型后,仍然保留了结构体类型(struct),而且,把它的功能也扩展了。C++允许使用struct来定义一个类类型。可以将前面用关键字class声明的类类型改为用关键字struct:

       程序运行结果如下:

       那么,C与C++二者有什么区别呢?何必多此一举,设两种功能一样的类型呢?这是由于C++语言在设计时所定下的一项原则:C++必须兼容C,使得大量过去用C编写的,已在广泛使用的C程序能够不加修改地在C++的环境下使用。

       可以设想,如果C++是从零开始设计(而不是以C为基础),很有可能不会提供结构体这种数据类型,因为类类型已经包括了结构体类型的所有功能,而且功能更强,更符合面向对象程序设计的要求。为了使结构体类型也具有封装的特征,C++不是简单地继承C的结构体,而是使它也具有类的特点,以便于用于面向对象程序设计。用struct声明的结构体类型实际上也是类。

但是,用struct声明的类和class声明的类是有区别的。用struct声明的类,如果对其成员不作private或public的声明,系统将其默认为public(公用的)。如果想分别指定私有成员和公用成员,则应用private或public做显式声明。而用class定义的类,如果不作private或public声明,系统将其成员默认为private(私有的),在需要的时候也可以自己用显式声明改变。

请对比下面两个例子:

struct student

{

    char name[32]; //姓名

    char addr[32]; //家庭地址

    long long number; //电话号码

    void print()    //输出成员的信息

    {

        cout << "name = " << name << endl;

        cout << "addr = " << addr << endl;

        cout << "number = " << number << endl;

    }

};

       由于没有用private或public对其成员作显式声明,系统将全部成员默认为public(公用的),外界可以任意引用其中的成员变量和成员函数。它不具有信息隐蔽的特征,除非将其中某些成员显式声明为private。

class student

{

    char name[32]; //姓名

    char addr[32]; //家庭地址

    long long number; //电话号码

    void print()    //输出成员的信息

    {

        cout << "name = " << name << endl;

        cout << "addr = " << addr << endl;

        cout << "number = " << number << endl;

    }

};

       由于没有用private或public对其成员作显式声明,系统将全部成员默认值为private(私有的),外界不可以引用其中的成员变量和成员函数。它具有信息隐蔽的特征,除非将其中某些成员显式声明为public。

       建议尽量使用class来建立类,写出完全体现C++风格的程序。

3 总结

本章我们学习了C++类的定义,并且使用C++类来定义对象。但是,C++类的定义不会这么简单,这里我们只是学习了定义一个C++类的语法。

下面,我们会继续学习C++类的特性,例如,C++类的构造函数,析构函数,多态继承等知识。

而且在类的封装特性里,还学习C++类的public, private, protected等属性。所以,我们需要一步一步,由浅入深地学习。掌握一个一个知识点。最终,学习完所有的知识点,再连接起来,就形成一个C++编程的知识点网络。才可以灵活使用C++语法来开发程序。

读者要仔细分析,掌握好每一个知识点,然后,自己总结出对该知识点的理解。自己总结出来的知识,理解才深刻,才是自己掌握的知识。

韦凯峰 Linux C/C++ 程序设计教程,Linux 系统编程,Openwrt 系统开发,微信:13926572996,QQ:1523520001,博客:www.mylinux.vip

以上是关于C++类和C结构体类型的异同的主要内容,如果未能解决你的问题,请参考以下文章

c++的类和结构体是啥关系

C++学习(四六零)C++类和结构体的关系

Swift之深入解析类和结构体的本质

C语言结构体的“继承”

链表使用类和结构体的区别?

Swift 结构体和类的区别