C++类和结构体以及C结构体的区别

从两周前开始接触数据结构,我便一直有个疑问

从我看书所接触到的例子来看书上用的都是C结构体

能不能用我上学期经常使用的类来完成这些问题呢

这个时候就要提到C结构体和C++结构体以及C++类这三者的区别了


C++结构体和C++类

两者从语法上来说并没有太大的区别

同样有成员访问权限

同样有构造函数析构函数this指针

同样拥有继承的能力

甚至可以让struct去继承class

通常情况下结构体能做到的

类都能做到,但是类能做到的

结构体不一定能做到

成员访问权限上

结构体默认都是public

类默认都是private

类型上看

结构体是值类型

类是引用类型

它们具有这两者的所有区别

https://www.cnblogs.com/Christal-R/p/7400332.html

效率上看

由于堆栈的执行效率要比堆的执行效率高

但是堆栈资源却很有限

不适合处理逻辑复杂的大对象

因此struct常用来处理主要存储数据的对象

而class来处理数据量大逻辑复杂的大对象

关系上看

struct不仅能继承也能被继承

而且可以实现接口

不过Class可以完全扩展

内部结构有区别,struct只能添加带参的构造函数

不能使用abstract和protected等修饰符,不能初始化实例字段


C结构体和C++结构体

C中的结构体是数据与算法分离的

也就是说你不能在C结构体内定义函数

而C++允许有内部成员函数

(前面提到的构造函数等)

虽然C结构体可以定义函数指针

但毕竟不是真的函数

所以C结构体不能实现面向对象编程

//也是为什么C不被称为面向对象的语言

//但是C仍然可以完成面向对象的设计

//底层语言魔改就完事了

C结构体只有public一种成员访问权限

但是C++结构体和类一样有private,protect和public

C结构体并没有办法来继承

在typedef的使用上也有所区别

//我后来去验证了一下参考文献第二篇的C结构体typedef

//发现即使不用typedef也可以直接用结构体名来声明变量

//所以这里就不提这一点了

C++里typedef如果不使用那么就可以直接在结构体后定义成员

主函数里直接引用成员的变量

#include<iostream>

struct Student{
    int number;
    int score;
}a;

int main(){

    a.number;
    
}

但是如果加上了typedef的限定符就需要再声明变量才能引用成员变量

#include<iostream>

typedef struct Student{
    int number;
    int score;
}a;

int main(){
    
    Student a;
    a.number;
    //这样才能引用
}

 

参考文献

https://www.cnblogs.com/cthon/p/9170596.html

https://www.cnblogs.com/qiumingcheng/p/7814970.html

发表评论

您的电子邮箱地址不会被公开。