有没有做catalog的网站,企业ci设计,门户网站建设关系到,网站广告用ps如何做系列文章目录 文章目录 系列文章目录C面试基础系列-struct1.C中struct2.C中struct2.1.同名函数2.2.typedef定义结构体别名2.3.继承 3.总结3.1.C和C中的Struct区别 4.struct字节对齐5.struct与const 关于作者 C面试基础系列-struct 1.C中struct
struct里面只能放数据类型#…系列文章目录 文章目录 系列文章目录C面试基础系列-struct1.C中struct2.C中struct2.1.同名函数2.2.typedef定义结构体别名2.3.继承 3.总结3.1.C和C中的Struct区别 4.struct字节对齐5.struct与const 关于作者 C面试基础系列-struct 1.C中struct
struct里面只能放数据类型基本数据类型自定义数据类型指针等不能放置函数C中不存在public、protected、privateC中定义结构体变量定义必须加struct。C不存在继承结构体与函数的名称可以相同
2.C中struct
C中strcut基本和class一致
C中struct默认是publicclass默认是privateC中存在public、protected、privateC中使用时可以不带strcutC中可以继承C中若结构体的名字与函数名相同可以正常调用但是定义结构体变量时候只能用带struct的
2.1.同名函数
struct A {};
A(){}
struct A s; //ok
A s; //error2.2.typedef定义结构体别名
A自带struct不可以直接调用函数
typedef struct a{int a;
}A;int main()
{A a;return 0;
}2.3.继承
struct继承和class是一致
#include iostream
struct Base
{int a;virtual void print(){std::cout print std::endl;}
};
struct Derived : public Base
{
public:int v2;void print(){printf(%s\n, Derived);};
};
int main()
{Derived *b new Derived();b-print();return 0;
}3.总结
3.1.C和C中的Struct区别
CC不能将函数放在结构体声明能将函数放在结构体声明在C结构体声明中不能使用C访问修饰符。public、protected、private 在C中可以使用。在C中定义结构体变量如果使用了下面定义必须加struct。可以不加struct结构体不能继承没有这一概念。可以继承若结构体的名字与函数名相同可以正常运行且正常的调用若结构体的名字与函数名相同使用结构体只能使用带struct定义
在C中struct和class都可以用来定义自定义数据类型但它们之间存在一些关键的区别
默认访问权限 struct的成员默认是public即可以被任何外部代码访问。class的成员默认是private即只能在类的内部访问。 继承访问权限 当一个struct继承自另一个struct时基类的public成员在派生类中默认也是public。当一个class继承自另一个class时基类的public成员在派生类中默认是private。 设计意图 struct通常用于简单的数据结构如纯数据的聚合没有太多的封装和抽象。class通常用于创建具有封装、继承和多态性的面向对象结构。 构造函数和析构函数 struct可以有构造函数和析构函数但它们默认是public的。class也可以有构造函数和析构函数但它们默认是private的除非显式指定。 继承 struct可以被继承并且基类的成员在派生类中保持原有的访问级别。class也可以被继承但基类的public成员在派生类中默认是private的。 多态 struct支持多态但通常不会用struct来实现多态性因为它通常不包含虚函数。class支持多态并且可以包含虚函数和抽象类。 语法 struct和class在语法上几乎相同都可以包含数据成员、成员函数、继承等。 使用场景 struct通常用于类似C语言的简单记录结构没有方法或行为。class用于定义具有封装、继承和多态性的复杂数据类型。 C11及以后 从C11开始struct和class在使用上更加一致struct也可以包含成员函数和构造函数。 在实际使用中struct和class的区别主要在于默认的访问权限和设计意图。struct更适合简单的数据结构而class更适合需要封装和继承的面向对象设计。然而这种区分更多是传统和风格上的技术上两者几乎可以互换使用。
4.struct字节对齐
结构体占用内存空间大小结构体存在字节对齐现象实际使用空间往往大于结构体内部定义的数据的大小总和。
#includeiostream
struct A{int a;char b;double c;
};
int main()
{std::coutA size is sizeof(A)std::endl;
}在64位系统中实际占用空间为16字节a,b共同占用8字节c占用8字节
5.struct与const
#include stdio.h
#include string.h#define ADDRESS_USER 0x1000000
#define ADDRESS_LENGTH 100unsigned char buffer1[ADDRESS_LENGTH];
unsigned char buffer2[ADDRESS_LENGTH];
unsigned char buffer3[ADDRESS_LENGTH];
unsigned char buffer4[ADDRESS_LENGTH];typedef struct buffer
{unsigned int address;unsigned int address_length;unsigned char *pbuffer;
} Buffer;// const Buffer test1 {ADDRESS_USER, ADDRESS_LENGTH, buffer1[0]};
// const Buffer test2 {ADDRESS_USER, ADDRESS_LENGTH, buffer2[0]};
// const Buffer test3 {ADDRESS_USER, ADDRESS_LENGTH, buffer3[0]};
// const Buffer test4 {ADDRESS_USER, ADDRESS_LENGTH, buffer4[0]};const Buffer test[4] {{ADDRESS_USER, ADDRESS_LENGTH, buffer1[0]},{ADDRESS_USER, ADDRESS_LENGTH, buffer2[0]},{ADDRESS_USER, ADDRESS_LENGTH, buffer3[0]},{ADDRESS_USER, ADDRESS_LENGTH, buffer4[0]}};const Buffer *pstructbuffers[4] {test[0],test[1],test[2],test[3]};const Buffer **get_buffer()
{return pstructbuffers;
}int main()
{// Buffer **tests (Buffer **)pstructbuffers;const Buffer **tests;tests get_buffer();for (int i 0; i 4; i){memcpy(tests[i]-pbuffer, testestes, i 1);}for (int i 0; i 4; i){printf(buffer %s\r\n, tests[i]-pbuffer);}return 0;
}关于作者
以上就是今天要讲的内容如果您觉得文章还不错还请您给个三连加关注非常感谢
本文作者WeSiGJ 微信公众号WeSiGJ
GitHub:https://github.com/wesigj/CPLUSCPLUSBOYS CSDN:https://blog.csdn.net/wesigj 微博
版权声明本文为博主原创文章遵循 CC 4.0 BY-SA 版权协议转载请附上原文出处链接和本声明。