首页 > 其他 > 详细

struct 和class到底有什么区别

时间:2019-06-01 17:36:50      阅读:57      评论:0      收藏:0      [点我收藏+]

我们知道struct是C语言的宠儿,当需要一个复杂类型的时候就需要定义一个struct

比如一个学生结构体,含有三个属性,分别是编号、名字和年龄。

1 typedef struct Student
2 {
3     int id;
4     char* name;
5     int age;
6 };

当我们用一个链表将他们存起来,即指针指向struct,然后便可以对所有学生进行查看、删除、修改和增加,这不就是你曾经做过的简单学生管理系统吗???

你甚至可以在struct内部定义实现函数,比如:

VC++ 6.0编译

 1 typedef struct Student
 2 {
 3     int id;
 4     char* name;
 5     int age;
 6 
 7     setSum(int _age)
 8     {
 9         age = _age;
10     }
11 
12     int getAge()
13     {
14         return age;
15     }
16 
17     Student()
18     {
19         id = 0;
20         name = "小明";
21     }
22 };
1 int main()
2 {
3     Student s;    
4     s.setSum(22);
5     int age = s.getAge();
6     cout << s.id << "  "  << s.name << " " << s.age << endl; // result : 0  小明  22
7 
8     return 0;
9 }

VS2017编译

 1 struct MyStruct
 2 {
 3 public:
 4     int id;
 5     char name[20];
 6     int age;
 7 
 8     MyStruct()
 9     {
10         id = 0;
11         strcpy_s(name, "小明");
12         age = 22;
13     }
14     void setAge(int _age)
15     {
16         this->age = _age;
17     }
18     int getAge()
19     {
20         return this->age;
21     }
22 };

甚至,你可以为属性和操作加上限定public,private限定,没有问题。

1 public:
2     int id;
3     char name[20];
4 private:
5     int age;

到这儿,你可能会疑惑了:用类来实现不是差不多吗?

试一下

 1 class MyClass
 2 {
 3 public:
 4     MyClass() {};
 5     ~MyClass() {};
 6 
 7     void setAge(int _age)
 8     {
 9         this->age = _age;
10     }
11     int getAge()
12     {
13         return this->age;
14     }
15 public:
16     int id;
17     char name[20];
18 private:
19     int age;
20 };

你没看错,就是只要把关键字struct换成class就可以了。功能完全相同。

进而,你可以试试继承、多态,struct完全可以像class那样实现。

好了,问题来了

struct和class有什么区别?

核型区别就只有一条,默认的读取权限不同。struct是public,而class是private。

我们可以看下面例子。(属性不做限制,再看他们的读取权限)

技术分享图片

技术分享图片

结果是,struct可以正常读取,而class因为默认是private所以无法读取属性。

还有其他区别吗?

class可用于声明类模板,而struct不可以

技术分享图片

即struct不是模板类型,不可做为类型模板参数。

summary:

1. 默认权限(struct-public, class-private)

2. 是否可用于声明模板(struct不可以, class可以)


其实,推敲他们的区别,没什么意义。在使用过程中用你习惯的那种方式,即单纯声明数据集合体就用struct,有属性和操作就用class,就可以了。

参考资料

【1】https://www.cnblogs.com/ccsccs/articles/4025131.html

struct 和class到底有什么区别

原文:https://www.cnblogs.com/yocichen/p/10960287.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!