您现在的位置是:首页 > 名人名句

一文讲明白C++中的结构体Struct和类Class的区别以及使用场景

作者:亙句时间:2024-04-05 19:15:27分类:名人名句

简介  文章浏览阅读5.9k次,点赞15次,收藏32次。虽然结构体和类在某些方面很相似,但它们的默认行为、访问权限、使用场景以及是否支持面向对象编程的特性(如继承、多态等)都有明显的差异。在选择使用结构体还是类时,需要考虑你的代码的需求和设计目标。_c++ 与 str

点击全文阅读

一文讲明白C++中的结构体Struct和类Class的区别以及使用场景

文章目录

一文讲明白C++中的结构体Struct和类Class的区别以及使用场景一、C++中的结构体Struct二、C++中的类Class三、结构体Struct和类Class之间的区别以及各自使用场景

一、C++中的结构体Struct

  在C++中,结构体(struct)是一种用于组合不同类型的数据成员的用户自定义数据类型。结构体允许你在一个单一的实体中存储多个不同类型的数据,并且可以根据需要自定义数据成员的布局和访问权限。下面是关于C++中结构体的详细解释:

1、声明结构体
  你可以使用struct关键字来声明一个结构体。结构体的声明通常放在头文件或者全局命名空间中,以便在多个地方都可以使用。
struct Person {    std::string name;    int age;    double height;};
2、结构体成员
  在结构体中,你可以定义多种不同类型的成员变量,这些变量称为数据成员。成员可以是基本数据类型、自定义的结构体、指针、数组等。
struct Rectangle {    double width;    double height;};struct Student {    std::string name;    int age;    double grades[5];    Rectangle favoriteRectangle;};
3、结构体实例化
  你可以像创建基本类型变量一样创建结构体变量。结构体的数据成员可以通过.运算符访问。
Person person1;person1.name = "Alice";person1.age = 25;person1.height = 1.75;
4、默认访问权限
  在结构体中,数据成员的默认访问权限是public,这意味着它们可以在结构体外部直接访问。
struct Point {    double x;    double y;};int main() {    Point p;    p.x = 10.0;    p.y = 5.0;    return 0;}
5、成员函数
  结构体也可以拥有成员函数,但它们的使用通常是限于简单的操作,而不是丰富的行为。成员函数在结构体内部声明和定义,可以访问结构体的数据成员。
struct Circle {    double radius;    double calculateArea() {        return 3.14 * radius * radius;    }};int main() {    Circle c;    c.radius = 5.0;    double area = c.calculateArea();    return 0;}
6、访问控制
  C++11引入了结构体成员的访问控制修饰符(public、private、protected),允许你控制成员的访问权限。默认情况下,C++中的结构体成员是public的,但你也可以显式地指定不同的访问权限。
struct Example {    int publicMember;    // 默认是publicprivate:    int privateMember;public:    void setPrivateMember(int value) {        privateMember = value;    }    int getPrivateMember() {        return privateMember;    }};

  总之,C++中的结构体是一种方便的数据组织方式,允许你将不同类型的数据组合在一起。虽然结构体的默认访问权限是public,但你也可以使用访问控制修饰符来更好地控制结构体成员的可见性。对于简单的数据封装和轻量级的数据结构,结构体是一个很好的选择。

二、C++中的类Class

  在C++中,类(class)是一种重要的概念,用于创建用户定义的数据类型,可以包含数据成员和成员函数,以实现数据的封装和操作。类是面向对象编程的核心,允许将数据和操作封装在一起,以创建更加模块化和可维护的代码。下面是关于C++中类的详细解释:

1、类的声明和定义
  类的声明通常在头文件(.h 或 .hpp)中,而类的成员函数的定义则在源文件(.cpp)中。这种分离使得代码的组织更加清晰。
// Person.hclass Person {private:    std::string name;    int age;public:    Person(const std::string &n, int a);    void displayInfo();};
// Person.cpp#include "Person.h"Person::Person(const std::string &n, int a) : name(n), age(a) {}void Person::displayInfo() {    std::cout << "Name: " << name << ", Age: " << age << std::endl;}
2、构造函数和析构函数
  类可以有构造函数用于初始化对象,以及析构函数用于在对象被销毁时进行清理工作。构造函数的名称与类名相同,没有返回值,可以有参数;析构函数的名称也与类名相同,前面加上一个波浪号(~)。
class Student {private:    std::string name;public:    Student(const std::string &n);    ~Student();};
3、成员函数
  类可以拥有成员函数,这些函数用于操作和处理类的数据成员。成员函数可以在类的内部声明和定义,或者在类外部定义。
class Circle {private:    double radius;public:    Circle(double r);    double calculateArea();};double Circle::calculateArea() {    return 3.14 * radius * radius;}
4、成员访问控制
  类的成员可以通过访问控制符(public、private、protected)来控制其可见性和访问权限。默认情况下,类的成员的访问权限是private。
class Example {private:    int privateMember;public:    int publicMember;protected:    int protectedMember;};
5、对象实例化
  通过类的构造函数,可以创建类的对象实例。
Person person1("Alice", 25);Circle circle1(5.0);
6、继承和多态
  C++中的类支持继承和多态等面向对象的概念,允许你通过基类创建派生类,实现代码的扩展和重用。
class Shape {public:    virtual double calculateArea();};class Rectangle : public Shape {private:    double width;    double height;public:    Rectangle(double w, double h);    double calculateArea() override;};
7、访问成员
  类的成员可以通过对象的成员访问运算符(.)来访问。
Person person1("Alice", 25);person1.displayInfo();

  总结:C++中的类是面向对象编程的基础,它允许将数据和操作封装在一起,以实现模块化和可维护的代码。类可以包含构造函数、析构函数、成员函数、数据成员等。通过继承和多态等特性,类可以实现代码的扩展和重用。类的访问控制使得你可以控制成员的可见性,从而提高了代码的安全性和封装性。在实际开发中,类是一个非常有用的工具,用于组织复杂的数据和行为。

三、结构体Struct和类Class之间的区别以及各自使用场景

  C++中的结构体(struct)和类(class)有一些相似之处,但也存在一些关键的区别。以下是结构体和类之间的主要区别:

1、默认访问权限

结构体的成员默认访问权限是公共的(public),这意味着结构体的成员在外部可以直接访问。类的成员默认访问权限是私有的(private),这意味着类的成员在外部不能直接访问,需要通过公共的成员函数来访问。

2、成员函数

类可以包含成员函数,这些函数可以操作类的私有成员,并且可以实现类的行为和功能。结构体也可以有成员函数,但是它们的主要目的是为了实现一些操作,而不是定义类似于类的行为。

3、继承

类可以通过继承实现子类与父类之间的关系,可以使用公共、保护或私有继承来控制成员的访问权限。结构体也可以继承,但由于其成员默认是公共的,继承可能导致访问权限问题。

4、构造函数和析构函数

类可以拥有构造函数和析构函数,用于对象的初始化和清理。结构体也可以有构造函数和析构函数,但是它们的使用场景通常是比较简单的数据封装。

5、默认成员访问标签(Access Labels)

在类中,可以使用访问标签(public、private、protected)来指定成员的访问权限。在结构体中,无法使用访问标签来指定成员的访问权限,所有成员都默认是公共的。

6、 使用场景

结构体的使用场景

用于存储一组相关的数据,但没有复杂的操作和逻辑。当数据的封装比行为更重要时,例如在处理图形、坐标、日期等数据时。当你需要将数据序列化/反序列化为二进制或其他格式时。作为轻量级的数据容器,适用于性能要求较高的情况。

类的使用场景

当你需要封装数据并附加操作和行为时,类更适合,因为它允许你将数据和操作封装在一起。在面向对象编程中,用于建模现实世界的对象,例如人、车辆、银行账户等。当你需要使用继承和多态来实现代码的扩展和重用。为了实现更复杂的数据结构,如链表、树、图等。

总结
  虽然结构体和类在某些方面很相似,但它们的默认行为、访问权限、使用场景以及是否支持面向对象编程的特性(如继承、多态等)都有明显的差异。在选择使用结构体还是类时,需要考虑你的代码的需求和设计目标。

点击全文阅读

郑重声明:

本站所有活动均为互联网所得,如有侵权请联系本站删除处理

我来说两句