3d建模素材网站,东台做网站公司,旅游网站建设ppt模板下载,腾讯企业邮箱登录页面在C编程语言中#xff0c;struct和class是两个定义数据类型的关键字。尽管它们看起来相似#xff0c;但它们之间有一些关键的异同。
基本定义
struct
struct是从C语言继承而来的#xff0c;它用于定义一个结构体#xff08;structure#xff09;#xff0c;结构体是由…在C编程语言中struct和class是两个定义数据类型的关键字。尽管它们看起来相似但它们之间有一些关键的异同。
基本定义
struct
struct是从C语言继承而来的它用于定义一个结构体structure结构体是由多个数据成员组成的一种用户自定义数据类型。在C中struct不仅仅用于定义数据成员还可以包含成员函数。
struct MyStruct {int data1;float data2;void display() {std::cout data1: data1 , data2: data2 std::endl;}
};class
class是C中的一个核心概念用于定义一个类。类是面向对象编程的基本构建块除了可以包含数据成员还可以包含成员函数、访问控制修饰符、构造函数、析构函数、以及其他特性。
class MyClass {int data1;float data2;public:MyClass(int d1, float d2) : data1(d1), data2(d2) {}void display() {std::cout data1: data1 , data2: data2 std::endl;}
};访问控制
struct的访问控制
在struct中默认的访问控制级别是public。这意味着如果没有显式地声明成员的访问控制级别这些成员是公开的可以被外部代码访问。
struct MyStruct {int data1; // 默认是publicfloat data2;void display() { // 默认是publicstd::cout data1: data1 , data2: data2 std::endl;}
};class的访问控制
在class中默认的访问控制级别是private。这意味着如果没有显式地声明成员的访问控制级别这些成员是私有的只能被类的成员函数访问。
class MyClass {int data1; // 默认是privatefloat data2;public:MyClass(int d1, float d2) : data1(d1), data2(d2) {}void display() {std::cout data1: data1 , data2: data2 std::endl;}
};继承
在继承关系中struct和class的行为也有所不同。具体来说在继承时基类成员的默认访问控制级别不同
struct的继承
在struct中继承默认是public的。这意味着基类的public和protected成员在派生类中保持其访问控制级别。
struct BaseStruct {int baseData;
};struct DerivedStruct : BaseStruct {void show() {std::cout baseData: baseData std::endl; // 继承默认是public}
};class的继承
在class中继承默认是private的。这意味着基类的public和protected成员在派生类中默认变为private。
class BaseClass {int baseData;
public:BaseClass(int d) : baseData(d) {}int getBaseData() { return baseData; }
};class DerivedClass : BaseClass {
public:DerivedClass(int d) : BaseClass(d) {}void show() {std::cout baseData: getBaseData() std::endl; // 继承默认是private需要通过public方法访问}
};构造函数和析构函数
struct和class在定义构造函数和析构函数时没有本质区别。它们都可以包含默认构造函数、参数化构造函数、复制构造函数、移动构造函数、析构函数等。
struct中的构造函数和析构函数
struct MyStruct {int data1;float data2;MyStruct(int d1, float d2) : data1(d1), data2(d2) {}~MyStruct() { std::cout MyStruct destroyed std::endl; }
};class中的构造函数和析构函数
class MyClass {int data1;float data2;public:MyClass(int d1, float d2) : data1(d1), data2(d2) {}~MyClass() { std::cout MyClass destroyed std::endl; }
};小结
尽管struct和class在C中有许多相似之处它们之间的主要区别在于默认的访问控制级别和继承行为。总结如下 默认访问控制级别 struct的默认访问控制级别是public。class的默认访问控制级别是private。 继承默认访问控制级别 struct的继承默认是public。class的继承默认是private。 其他方面 struct和class都可以包含数据成员和成员函数都支持构造函数、析构函数、继承、多态等特性。
根据具体的需求和代码风格我们可以选择使用struct或class来定义数据类型。在简单的数据结构或需要所有成员默认公开的情况下可以选择使用struct在面向对象编程、需要更严格的访问控制时更常使用class。