C++ struct

C++struct与C中struct的不同

1.C++和C的struct命名小有不同

struct data
{
	int a;
	int b;
};

同样的结构体,C++可以直接使用data声明类型,而C必须使用struct data(不使用typedef)

2.C++的struct可以定义函数,C不行
3.C++struct可以包含一些C++独有的类的特性(访问控制符号,成员函数,继承)

C++struct与class的不同

class 时,类中的成员默认都是 private 属性的;而使用 struct 时,结构体中的成员默认都是 public 属性的。
class 继承默认是 private 继承,而 struct 继承默认是 public 继承。
class 可以使用模板特性,而 struct 不能。(有的文章有,但是我试过了,struct是可以使用模板的)

struct与union的区别

1.在存储多个成员信息时,编译器会自动给struct第个成员分配存储空间,struct 可以存储多个成员信息,而Union每个成员会用同一个存储空间,只能存储最后一个成员的信息。(struct的大小根据内存对齐计算,union根据成员中最大的成员决定)
2.都是由多个不同的数据类型成员组成,但在任何同一时刻,Union只存放了一个被先选中的成员,而结构体的所有成员都存在。
3.对于Union的不同成员赋值,将会对其他成员重写,原来成员的值就不存在了,而对于struct 的不同成员赋值 是互不影响的。
4.union可以使用模板,可以使用函数(包括构造函数,析构函数,拷贝构造函数,有this指针),可以使用(访问控制符),但是不能使用继承(和被继承),内部不能定义引用,不能定义静态变量

注意:union 可以定义常量,可以通过修改其他共享内存的变量来对常量进行修改

代码:

#include <iostream> 
#include <typeinfo> 
using namespace std;
class A
{
	
};
union un
{
	int a;
	int b;
	void func()
	{
		cout<<1<<endl;
	}
	int c;	
};
struct st:public A
{
	int a;
	int b;
	void func()
	{
		cout<<1<<endl;
	}
	int c;	
};
int main()
{
	un u;
	u.a = 2;
	u.b = 3;
	st s;
	s.a = 2;
	s.b = 3;
	printf("%d\n",sizeof(u));
	printf("%p\n",&u);
	printf("%p\n",&u.a);
	printf("%p\n",&u.b);
	printf("%p\n",&u.func);
	
	printf("%d\n",sizeof(s));
	printf("%p\n",&s);
	printf("%p\n",&s.a);
	printf("%p\n",&s.b);
	printf("%p\n",&s.func);
}

运行结果:
在这里插入图片描述
分析:
union 的大小由成员变量中的最大字节决定,struct的大小由内存对齐决定
union和struct中可以定义函数,函数指针储存在对象内存的附件,但是sizeof不计算.
struct可以继承,union不可以
union中共享内存的部分只是在进程内而不是进程之间。并且union中的函数不与成员变量共享内存(包括指针)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值