c++中结构体与类、容器的区别

结构体(struct):用于组合不同类型的数据成员的用户自定义数据类型,允许在一个单一的实体中存储多个不同类型的数据,并且可以根据需要自定义数据成员的布局和访问权限。
声明结构体:可以在头文件中声明或者在全局命名空间中,以便在多个地方都可以使用。

struct Person {
    std::string name;
    int age;
    double height;
};

在结构体中可以定义不同类型的成员变量,这些变量称为数据成员。可以是基本数据类型,自定义数据类型,指针,数组等。

struct Rectangle {
    double width;
    double height;
};

struct Student {
    std::string name;
    int age;
    double grades[5];
    Rectangle favoriteRectangle;
};

结构体的默认访问权限是public,直接访问。但是也可以设置访问权限,如:

struct Example {
    int publicMember;    // 默认是public
private:
    int privateMember;
public:
    void setPrivateMember(int value) {
        privateMember = value;
    }
    int getPrivateMember() {
        return privateMember;
    }
};

结构体也可以拥有成员函数,但他们的使用通常是限于简单的操作,而不是丰富的行为。可以内部声明和定义,可以访问结构体的数据成员。
总之,对于简单的数据封装和轻量级的数据结构,结构体是一个很好的选择。

c++中的类(Class):用于创建用户自定义的数据类型,可包含数据成员和成员函数,实现数据的封装和操作,允许将数据和操作封装在一起。
类可以在头文件中声明,但是类的成员函数的定义可以是在.cpp文件中(构造函数),在类中可以只是声明一个成员函数。

Person::Person(const std::string &n, int a) : name(n), age(a) {}

:name(n),age(a)这是成员初始化列表,用于初始化类的成员变量,用传入的两个参数来初始化类的两个成员变量。
类可以有构造函数用于初始化对象,析构函数用于在对象被销毁的时候进行清理工作,构造函数可以有参数,但是没有返回值。
类的声明:

// Person.h
class 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;
}

对象实体化:通过类的构造函数,可以实现创建类的对象实例

Person person1("Alice", 25);
Circle circle1(5.0);

类最重要的是继承:支持继承和多态,允许基类创建派生类。

class Shape {
public:
    virtual double calculateArea();
};

class Rectangle : public Shape {
private:
    double width;
    double height;

public:
    Rectangle(double w, double h);
    double calculateArea() override;
};

虚函数关键字virtual:可以在派生类中进行重写。
重写关键字override:可以对基类函数的重写,实现多态。

容器(vetcor):是一种用于存储和组织数据的数据结构,可以容纳一组元素,并提供了各种操作和算法来操作这些元素。
容器可以存储相同类型或者不同类型的元素,具有动态大小,可以动态的增删改查元素。
容器提供了丰富的成员函数和迭代器来操作元素。

结构体与类的区别:
1.结构体成员默认的访问权限是公共的,但是类的默认访问权限是私有的。
2.结构体的成员函数主要适用于实现一些操作,但是类的成员函数是用于操作类的成员变量的,实现类的行为和功能。
3.结构体继承默认是公共的,可能导致访问权限问题,但是类的继承可以选择公共、私有、保护继承来控制成员的访问权限。
4.类拥有构造函数和析构函数,用于对象的初始化和清理,结构体也可以有构造函数和析构函数,但是他们的使用场景通常是比较简单的数据封装。
5.结构体无法设置成员变量的访问权限,默认是公共的。
6.使用场景:
结构体:
(1)用于储存一组相关的数据,但是没有复杂的操作和逻辑。
(2)数据的封装比行为更重要。
(3)可以作为轻量级的数据容器。
类:
(1)需要对数据进行封装并赋予行为操作,更加合适。
(2)面向对象,需要继承、多态来扩展和重用。
(3)更加复杂的数据结构。
容器:主要关注于对数据的存储和操作,但是它提供了丰富的迭代器和算法来对存储的数据进行操作。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值