C++中关键字Struct和Class的区别

yizhihongxing

当我们在使用C++语言的时候,常常会用到两个类似的关键字:struct 和 class,虽然从最初的设计上来说,两者是等价的。但是,在实际使用中,两者还是有所不同的。

struct和class的定义

首先,我们先看struct和class在定义上的区别。定义一个struct的方式如下:

struct Student {
    int age;
    char name[20];
};

而定义一个class的方式如下:

class Student {
private:
    int age;
    char name[20];
public:
    void setAge(int age) {
        this->age = age;
    }
    int getAge() {
        return age;
    }
};

从定义上,我们可以看到struct中的成员默认是公有的,而class中的成员默认是私有的。因此,如果我们想要在class中调用成员变量,需要使用public关键字进行公开。

struct和class的区别

在使用上,struct和class之间的区别主要有以下几点:

  1. 默认访问权限不同

我们已经在定义部分介绍过了,struct中的成员默认是公有的,而class中的成员默认是私有的。因此,在使用struct时,我们需要特别小心,因为它可能会将一些本应该是私有的对象暴露出来。而在class中,我们可以使用public关键字明确让成员变量公开,同时使用private关键字将一些成员变量封装起来。

  1. 成员函数默认不同

在struct中,成员函数默认是public的;而在class中,成员函数默认是private的。如果我们想让一个class对象调用它的成员函数,我们需要将它声明为public。

  1. 继承方式不同

在struct中,继承默认是public的;而在class中,继承默认是private的。因此,如果我们要使用继承并且希望派生类的成员可以访问基类中的成员,那么使用struct更为方便。

struct和class的应用

下面我们用两个具体的示例来说明struct和class的应用:

首先是一个struct的示例:

struct Point {
    int x;
    int y;
    void print() {
        std::cout << x << ", " << y << std::endl;
    }
};

int main() {
    Point p;
    p.x = 0;
    p.y = 0;
    p.print();

    return 0;
}

这个示例中,我们使用了一个struct来表示一个点,点的x和y坐标是公有的,通过print函数进行打印,我们可以很清晰地看到这个点的位置。

接下来,是一个class的示例:

class Dog {
private:
    std::string name;
    int age;
public:
    Dog(std::string n, int a) {
        name = n;
        age = a;
    }
    void bark() {
        std::cout << "my name is " << name << ", I am " << age << " years old" << std::endl;
    }
};

int main() {
    Dog dog("Tommy", 3);
    dog.bark();

    return 0;
}

这个示例中,我们使用了一个class来表示一只狗,狗的名字和年龄是私有的,通过构造函数进行初始化,并且我们在类中定义了一个对外公开的函数bark,当这只狗被呼叫的时候,它会自我介绍。

通过这两个示例,我们可以更加清晰地看到struct和class之间的差异,以及它们在不同的场景中的应用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++中关键字Struct和Class的区别 - Python技术站

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • vue element el-form 多级嵌套验证的实现示例

    Vue Element el-form 多级嵌套验证的实现示例攻略 在Vue和Element UI中,我们可以使用el-form组件来实现表单验证。当我们需要处理多级嵌套的表单验证时,可以按照以下步骤进行实现。 步骤一:创建表单结构 首先,我们需要创建一个包含多级嵌套的表单结构。例如,我们创建一个包含两个级别的表单,其中第一级包含一个输入框,第二级包含一个选…

    other 2023年7月28日
    00
  • C++中字符串查找操作的两则实例分享

    下面是“C++中字符串查找操作的两则实例分享”的完整攻略。 一、背景 在 C++ 开发中,字符串查找是一种非常常见的操作。对于字符串的查找,我们可以使用 C++ 标准库中提供的一些函数,比如 strstr() 函数和 std::string 类中的 find() 函数等,它们能够很方便地实现对字符串的查找操作。 不过,在某些情况下,我们可能需要在字符串中查找…

    other 2023年6月20日
    00
  • 酷q插件_sdk———入门与使用

    以下是酷Q插件SDK的入门与使用攻略: 酷Q插件SDK 酷Q插件SDK是一个用于开发QQ机器人插件的开发工具包。提供了一组API,使开发者可以轻松地开发自QQ机器人插件。以下是使用酷Q插件SDK的详细步骤: 1. 下载酷Q插件SDK 您可以在酷官方网站上下载酷Q插件SDK。下载完成后,您需要将SDK解压缩到您的开发环境中。 2. 创建插件 在酷Q插件SDK中…

    other 2023年5月7日
    00
  • 解决IDEA 2020.1版本 maven Test命令出现导包错误的问题

    解决 IDEA 2020.1 版本 maven Test 命令出现导包错误的问题 问题描述 在使用 IDEA 2020.1 版本时,执行 maven Test 命令时可能会出现导包错误的问题。 解决方法 解决该问题的方法有两种: 2.1 使用 IDEA 自带的 Maven 打开 IDEA,点击菜单栏的 File -> Setting -> Bui…

    other 2023年6月27日
    00
  • php单例模式实现(对象只被创建一次)

    PHP单例模式实现(对象只被创建一次) 单例模式是一种常用的设计模式,用于确保一个类只有一个实例,并提供全局访问点。在PHP中,可以通过以下步骤实现单例模式: 创建一个私有的静态成员变量,用于保存类的唯一实例。 创建一个私有的构造函数,防止类被外部实例化。 创建一个公共的静态方法,用于获取类的唯一实例。 以下是一个完整的PHP单例模式实现的示例代码: cla…

    other 2023年10月15日
    00
  • c#tcp协议收发数据(tcpclient发 socket收)

    以下是关于“C# TCP协议收发数据(TcpClient发Socket收)”的完整攻略,包括基本概念、解决方法、示例说明和注意事项。 基本概念 TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层协议。在TCP协议中,数据被分割成TCP报文段,并通过网络传输。TcpClient是C#中用于实现TCP…

    other 2023年5月7日
    00
  • django的使用步骤入门教程(很详细)

    Django的使用步骤入门教程 1. 安装Django 在开始使用Django之前,首先要确保在本地环境中安装了Python。然后,可以通过以下步骤安装Django: 打开终端或命令提示符。 运行以下命令进行Django的安装: pip install django 2. 创建Django项目 完成Django的安装后,可以按照以下步骤创建一个Django项…

    other 2023年6月28日
    00
  • Android实用的Toast工具类封装

    Android实用的Toast工具类封装 在Android开发中,Toast是一个非常常用的组件,用于向用户展示简短信息的提示框。但是,每次使用Toast,都需要写一堆重复的代码,十分麻烦。因此,我们可以考虑封装一个Toast工具类,方便我们的使用。 实现步骤 1. 创建Toast工具类 在我们的项目中,创建一个名为ToastUtil的类,用于封装Toast…

    other 2023年6月25日
    00
合作推广
合作推广
分享本页
返回顶部