C++核心编程之类和对象一

C++核心编程之类和对象一

文章目录

    • C++核心编程之类和对象一
      • 1.类
        • 1.类的组成
        • 2.类的访问权限
        • 3.class和struct的区别

1.类

1.类的组成

一个类通常由属性(也叫成员属性)和行为(成员函数、成员方法)组成,类有不同的访问权限(公共、保护和私有),假设现在有一个学生类Student:

//
// Created by 86189 on 2024/6/1.
//
#include "iostream"
using namespace std;class Student{
public:string name;int grade{};void printMessage() const{cout<<"姓名:"<<name<<" 年级:"<<grade<<endl;}
};int main(){Student stu;stu.name="张三";stu.grade=21107123;stu.printMessage();return 0;
}

Student stu称为创建一个对象。

2.类的访问权限

公共权限:即类内可以访问,类外也可访问。

保护权限:即类内可以访问,类外不可访问。

私有权限:即类内可以访问,类外不可访问。

#include "iostream"
using namespace std;class Student{
public:int sex;
protected:int age;
private:int height;
};int main(){Student s{};s.sex = 1;
//    s.age = 18;
//    s.height = 180;return 0;
}

类内:class内。

从上边示例可以看到,在类外无法访问保护和私有权限的成员属性。但在类内可以访问:

#include "iostream"
using namespace std;class Student{
public:int sex;
protected:int age;
private:int height;void print(){cout << sex << endl;cout << age << endl;}
};int main(){Student s{};s.sex = 1;
//    s.age = 18;
//    s.height = 180;
//    s.print();return 0;
}

在实际应用中,通常设置私有的成员属性,再通过共有的成员函数进行操作,实现数据的可读可写,只读等等操作,同时也可以实现数据的效验。

//
// Created by 86189 on 2024/6/2.
//
#include "iostream"
using namespace std;class Person{
private:string name; // 姓名,私有成员,不在类的外部直接访问int age = 18; // 年龄,初始化为18int weight{}; // 体重,初始化为空值int height{}; // 身高,初始化为空值int id{}; // ID,初始化为空值public:// 获取ID值// 如果ID小于0,则设置为0;如果大于10亿,则设置为10亿// 这样做是为了确保ID的合理性和范围限制int getId(){if(id < 0){id = 0;}if (id > 1000000000){id = 1000000000;}return id;}// 设置ID值// 参数p_id: 新的ID值void setId(int p_id){id = p_id;}// 设置年龄// 参数P_age: 新的年龄值// 返回值: 设置后的年龄// 如果年龄小于0,则设置为0;如果大于150,则设置为150// 这样做是为了确保年龄的合理性和范围限制int setAge(int P_age){if(age < 0){age = 0;}if (age > 150){age = 150;}age = P_age;return age;}
};int main(){Person p; // 创建Person对象p.setId(1); // 设置对象的ID为1cout << p.getId() << endl; // 输出ID值cout << p.setAge(15) << endl; // 设置年龄为15并输出return 0;
}
3.class和struct的区别

在C++中,classstruct都可以用来定义一种新的数据类型,但它们在默认情况下和在某些其他细节上有一些重要的区别。以下是它们之间的主要区别:

  1. 默认访问权限

    • struct中的成员默认是public的,即可以从任何地方访问。
    • class中的成员默认是private的,即只能在类的内部被访问,除非在定义时特别声明为publicprotected
  2. 用途

    • 尽管structclass在C++中可以用于定义几乎相同的数据结构,但传统上,struct更多地被用作数据的集合(即数据结构),而class则用于定义具有某些操作的对象(即封装数据和方法的对象)。
  3. 继承

    • 两者都可以用于实现继承,但由于class的默认访问权限是private,因此当使用class进行继承时,派生类无法直接访问基类的私有成员。而struct由于默认访问权限是public,因此派生类可以直接访问基类的公有成员。
  4. C和C++中的差异

    • 在C语言中,struct是唯一的用户定义数据类型,并且它只能包含数据成员(即变量)。
    • 在C++中,structclass都可以包含数据成员和成员函数(即方法)。但如上所述,它们之间的默认访问权限不同。
  5. 其他C++特性

    • 在C++中,你还可以为structclass添加其他特性,如模板、构造函数、析构函数、操作符重载、继承、友元等。这些特性在structclass之间没有区别。
  6. 语法糖

    • 从语法的角度来看,classstruct是C++的“语法糖”。也就是说,除了默认访问权限不同外,它们在语法上几乎是相同的。
  7. 命名约定

    • 虽然这不是语言规则,但在某些编程环境中,程序员可能会根据命名约定来使用classstruct。例如,你可能会看到struct更多地用于定义简单的数据结构,如点(包含x和y坐标)或矩形(包含宽度和高度),而class则用于定义更复杂的对象,如汽车或人。

classstruct在C++中的主要区别在于它们的默认访问权限和可能的命名约定。但在功能上,它们几乎是一样的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/20806.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Facebook开户 | Facebook二不限户

Facebook二不限户的正确使用方法 Facebook 二不限是指 Facebook 国内二不限户&#xff0c;是通过代理开出来的一种特殊账户&#xff0c;️需要广告主准备主页。 其特点是&#xff1a;限主页、不限域名、额度没解限&#xff0c;解限后则不限额度。 相比于三不限户&#xff0c;…

封装PHP用于发送GET和POST请求的公共方法

封装了ThinkPHP用于发送GET和POST请求的公共方法。这个方法可以放在你的公共函数文件中&#xff0c;或者创建一个独立的类来管理这些请求。 <?php namespace app\common\utils;use think\facade\Log; use think\exception\HttpException;class HttpRequest {/*** 发送GET请…

开源日志分析平台ELK实战应用

1.开源日志分析平台ELK概述及搭建过程 ELK 是一个开源的日志管理平台,由 Elasticsearch、Logstash 和 Kibana 三个组件组成。这个平台广泛用于实时日志处理和分析。下面简单介绍一下每个组件的作用以及如何搭建一个基本的 ELK 栈。 ELK 组件 Elasticsearch:是一个搜索和分析…

Pycharm的基础设置+Pycharm与AutoDL服务器连接

一.pycharm的基础设置 1.下载pycharm profession版&#xff0c;配置之前博客里面的解释器mask2 2.run detect.py 3.终端的设置 &#xff08;1&#xff09;先直接在终端里面pip install 我们再创建一个测试python文件&#xff1a;terninal_test.py 虽然上面安装成功了包&#x…

GNU Radio创建qt time plot python OOT块

文章目录 前言一、创建自定义的 OOT 块1、安装相应依赖2、创建 OOT 块3、修改相关4、编译及安装 OOT 块 二、测试1、grc 图2、运行结果 三、资源自取 前言 官方提供的绘制时域波形的 block 名字叫做 QT GUI Time Sink&#xff0c;其底层实现是用 C 写的&#xff0c;但是我发现…

回归预测 | MATLAB实现基于GOOSE-LightGBM的多特征输入单输出数据回归预测(鹅优化算法)

回归预测 | MATLAB实现基于GOOSE-LightGBM的多特征输入单输出数据回归预测(鹅优化算法) 目录 回归预测 | MATLAB实现基于GOOSE-LightGBM的多特征输入单输出数据回归预测(鹅优化算法)效果一览基本介绍程序设计参考资料 效果一览 基本介绍 MATLAB实现基于LightGBM算法的数据回归预…

AI办公自动化:用通义千问Qwen-Long批量总结PDF长文档内容

Qwen-Long是在通义千问针对超长上下文处理场景的大语言模型&#xff0c;支持中文、英文等不同语言输入&#xff0c;支持最长1000万tokens(约1500万字或1.5万页文档)的超长上下文对话。配合同步上线的文档服务&#xff0c;可支持word、pdf、markdown、epub、mobi等多种文档格式的…

查看VUE3代理后真正请求的URL

在vite.config.ts中添加如下配置&#xff1a; server: {host: "0.0.0.0", // 指定服务器应该监听哪个 IP 地址port: 8848, // 指定开发服务器端口open: true, // 开发服务器启动时&#xff0c;自动在浏览器中打开应用程序cors: true,// Load proxy configuration fr…

无人售货机零售业务成功指南:从市场分析到创新策略

在科技驱动的零售新时代&#xff0c;无人售货机作为一种便捷购物解决方案&#xff0c;正逐步兴起&#xff0c;它不仅优化了消费者体验&#xff0c;还显著降低了人力成本&#xff0c;提升了运营效能。开展这项业务前&#xff0c;深入的市场剖析不可或缺&#xff0c;需聚焦消费者…

【JS基础语法02】JS变量详解

一&#xff1a;变量命名规则与规范 1 规则 可以以下划线、字母、数字、$符命名&#xff0c;不能以数字开头不能以关键字命名&#xff0c;eg&#xff1a;let、var、const命名严格区分大小写&#xff0c;age、AGE是两个不同的变量名 2 规范(并不是规则&#xff0c;而是都应该遵…

openresty(Nginx) 配置 特殊URL 密码访问 使用htpasswd 配置 Basic_Auth登录认证

1 使用htpasswd 生成密码文件.htpasswd是Apache附带的工具。如果没有可以安装。 #centos 8.5 系统 yum install httpd-tools #Ubuntu 24.04 系统 sudo apt update sudo apt-get install apache2-utils #生成密码文件,用户test sudo htpasswd -c /usr/local/openresty/nginx/…

解析Java中1000个常用类:SafeVarargs类,你学会了吗?

在 Java 编程中,泛型和可变参数(varargs)的结合使用可能会导致一些类型安全的问题。为了解决这些问题,Java 提供了 @SafeVarargs 注解。本文将详细介绍 @SafeVarargs 注解的定义、使用方法、应用场景以及其背后的原理,帮助读者深入理解并掌握这一重要特性。 什么是 @Safe…

高效派单的秘诀:探索运维工单处理软件的五大关键功能-亿发

在快节奏的现代企业运营中&#xff0c;如何高效管理生产流程&#xff0c;确保任务按时完成&#xff0c;同时保持产品质量和客户满意度&#xff0c;是每个管理者面临的重要课题。工单管理系统&#xff0c;作为企业数字化转型的关键工具&#xff0c;正逐渐成为解决这些问题的利器…

TypeScript 中的高级类型

1. 联合类型和交叉类型 联合类型&#xff08;Union Types&#xff09;和交叉类型&#xff08;Intersection Types&#xff09;是 TypeScript 中常用的两种高级类型。 联合类型&#xff1a;使用 | 操作符将多个类型合并成一个新的类型&#xff0c;表示值可以是这些类型中的任意…

C++——输入输出、基本变量类型

目录 一、输入输出 1、标准输出流&#xff08;cout&#xff09; 2、标准输入流&#xff08;cin&#xff09; 3、标准错误流&#xff08;cerr&#xff09;和标准日志流&#xff08;clog&#xff09; 4、示例代码 二、基本数据类型 1、宽字符的用法 2、如何使用 3、示例…

构建基础网站的入门指南

在数字时代&#xff0c;网站已经成为展示个人、企业或组织信息的重要平台。了解如何通过编写代码来创建一个网站是非常有用的技能。在本文中&#xff0c;我们将了解构建一个基础网站所需的步骤和代码知识。第一步&#xff1a;了解网站的基本组成 一个基本的网站通常包含HTML&a…

【GPU原理】1.线程和缓存的关系

一、GPU如何做并行计算 1.简单的串行计算 对于如上的运算AXY&#xff0c;每次运算我们需要从内存读取两个数据&#xff0c;一个是x[i]&#xff0c;一个是y[i]&#xff0c;最后存回y[i]。这里面有一个FMA的操作&#xff08;融合乘加&#xff08;FMA&#xff09;指令是RISC处理器…

【区分vue2和vue3下的element UI InputNumber 计数器组件,分别详细介绍属性,事件,方法如何使用,并举例】

在 Vue 2 中&#xff0c;Element UI 提供了 el-input-number 组件作为计数器组件&#xff0c;用于处理数字输入。而在 Vue 3 中&#xff0c;Element Plus 同样提供了类似的组件&#xff0c;但可能有一些属性、事件或方法的细微差异。下面我将分别介绍 Vue 2 的 Element UI 和 V…

五月份0day/1day/nday漏洞汇总

0x01 免责声明 请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;作者不为此承担任何责任。工具来自网络&#xff0c;安全性自测&#xff0c;如有侵权请联系删…

ChatGPT的原理

1.ChatGPT的大致原理 ChatGPT使用了GPT-3.5模型&#xff0c;它是一个基于大型神经网络的对话生成模型。该模型是通过大规模的文本数据进行训练&#xff0c;能够生成与用户进行自然对话的响应。在对话中&#xff0c;ChatGPT会根据输入文本生成接下来的回复&#xff0c;其原理类…