公司做网站需要注意什么,做一个网上商城需要多少钱,鹰潭房产网站建设,wordpress 3d简介#xff1a; CSDN博客专家#xff0c;专注Android/Linux系统#xff0c;分享多mic语音方案、音视频、编解码等技术#xff0c;与大家一起成长#xff01; 优质专栏#xff1a;Audio工程师进阶系列【原创干货持续更新中……】#x1f680; 优质专栏#xff1a;多媒… 简介 CSDN博客专家专注Android/Linux系统分享多mic语音方案、音视频、编解码等技术与大家一起成长 优质专栏Audio工程师进阶系列【原创干货持续更新中……】 优质专栏多媒体系统工程师系列【原创干货持续更新中……】 人生格言 人生从来没有捷径只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注Android系统攻城狮 1.前言 本篇目的C之结构体初始化10种方式总结 2.C中的结构体struct和类class区别 C中的结构体struct和类class是两种用于封装数据和相关操作的复合数据类型。尽管它们在许多方面相似但它们在C中的使用和设计理念上存在一些关键差异。 首先从语法角度看结构体和类的基本定义形式非常相似。它们都允许我们定义数据成员即变量和成员函数即函数以便我们可以对数据进行操作。然而在C中结构体默认是公有public的这意味着其成员默认是公开的可以直接访问。相反类默认是私有的private这意味着其成员默认是隐藏的需要通过公有成员函数进行访问。 这种默认访问权限的差异反映了结构体和类在C中的设计理念。结构体通常被用于将一组数据聚合在一起形成一个逻辑上的整体这些数据成员通常是可以直接访问的。而类则更强调封装和隐藏内部状态通过公有成员函数提供对内部数据的访问和操作从而保护数据的完整性和安全性。 此外类还提供了更多的特性如继承、多态和模板等这些特性使得类在构建大型、复杂的软件系统时更加灵活和强大。结构体虽然也可以实现一些基本的封装和抽象但在这些高级特性上则显得力不从心。 总的来说结构体和类在C中都是用于封装数据和操作的复合数据类型但它们在默认访问权限、设计理念以及提供的特性上存在差异。选择使用结构体还是类应根据具体的应用场景和需求来决定。对于简单的数据聚合可以使用结构体对于需要更复杂封装和抽象的场景则应使用类。
3.代码实例
1.直接初始化
struct MyStruct {int x;double y;
};MyStruct s1 {10, 3.14};2.使用成员初始化列表
struct MyStruct {int x;double y;
};MyStruct s2 { .x 10, .y 3.14 };3.默认初始化并逐个赋值
struct MyStruct {int x;double y;
};MyStruct s3;
s3.x 10;
s3.y 3.14;
4.使用构造函数初始化
struct MyStruct {int x;double y;MyStruct(int a, double b) : x(a), y(b) {}
};MyStruct s4(10, 3.14);
5.使用默认构造函数初始化
struct MyStruct {int x;double y;
};MyStruct s5{};
s5.x 10;
s5.y 3.14;
6.使用列表初始化
struct MyStruct {int x;double y;
};MyStruct s6{};
s6 {10, 3.14};7.使用无名称的临时结构体对象
struct MyStruct {int x;double y;
};MyStruct s7 MyStruct{10, 3.14};8.使用emplace_back()
struct MyStruct {int x;double y;
};std::vectorMyStruct vec;
vec.emplace_back(10, 3.14);
9.使用std::make_pair()
struct MyStruct {int x;double y;
};std::pairint, double p std::make_pair(10, 3.14);
MyStruct s8 {p.first, p.second};
10.使用memcpy()
struct MyStruct {int x;double y;
};MyStruct s9;
int tempX 10;
double tempY 3.14;
std::memcpy(s9, MyStruct{tempX, tempY}, sizeof(MyStruct));
11.使用无名称的临时结构体对象实例代码 V1.0
#include iostream
using namespace std;struct BinderHandle1 {int32_t handle;
};class BpBinder1 {
public:BpBinder1(BinderHandle1 handle) {this-handle handle;}
private:BinderHandle1 handle;
};struct BinderHandle2 {int32_t handle;string data;
};class BpBinder2 {
public:BpBinder2(BinderHandle2 handle) {this-handle handle;}
private:BinderHandle2 handle;
};int main() {int handle 100;BpBinder1 *bp new BpBinder1(BinderHandle1{handle});delete bp;BpBinder2 *bp2 new BpBinder2(BinderHandle2{handle,124}); return 0;
}
11.使用无名称的临时结构体对象实例代码 V2.0
#include iostream
using namespace std;struct BinderHandle2 {int32_t handle;string data;
};class BpBinder2 {
public:BpBinder2(BinderHandle2 handle) {this-handle handle;printf(xxx---------------%s(), line %d, handle %d\n,__FUNCTION__,__LINE__,this-handle.handle);printf(xxx---------------%s(), line %d, data %s\n,__FUNCTION__,__LINE__,this-handle.data.c_str());}
private:BinderHandle2 handle;
};int main() {int handle 100;BpBinder2 *bp2 new BpBinder2(BinderHandle2{handle,124});delete bp2;return 0;
}