@大学生必看内容:C++类与对象详解

一、概念

  在C++中,类是一种用户定义的数据类型,用于封装数据和方法。类是面向对象编程的核心概念之一,它允许你创建具有特定属性和行为的对象。对象是类的实例,它是内存中的一个具体实体,可以调用类中定义的方法和访问类中定义的数据成员。

  1. 类和结构体的区别:
      在C++中,类和结构体都可以用来定义自定义的数据类型,它们的语法和功能有很多相似之处,但也有一些区别:
    (1)默认访问权限:
  • 类的成员默认是私有的,即在类定义中不显式声明为公有(public)或者保护(protected)的成员,默认为私有(private)。
  • 结构体的成员默认为公有(public)。

(2)继承:

  • 类支持继承,可以通过派生类来继承基类的成员。
  • 结构体不支持继承。
    (3)类型别名:
  • 类不能直接定义类型别名,需要使用typedef或者using关键字。
  • 结构体可以直接定义类型别名。
    (4)默认构造函数:
  • 类在没有显式定义构造函数时,会自动生成默认构造函数。
  • 结构体在没有显式定义构造函数时,也会自动生成默认构造函数。
    (5)成员函数:
  • 类的成员函数默认是内联的。
  • 结构体的成员函数默认是非内联的。

  总的来说,类更适合用于面向对象编程的场景,它提供了更多的封装和抽象特性,而结构体更适合用于简单的数据聚合和轻量级对象的场景。

#include <iostream>
using namespace std;

// 定义一个动物的类
class Animal
{
public:        //手动设置为公有属性,即实例化的对象可以直接访问
    void EatFood() {  // 类的成员函数
        cout << "我要吃食物" << endl;
    }
    char *name; //类的数据成员 
};

int main() {
    // 创建类的对象
    Animal Cat;
    Animal Dog;

    // 访问对象的成员函数  
    Cat.EatFood();   //因为是公有属性,所以可以直接访问。
       
    // 访问对象的数据成员
    Dog->name="花花";
    cout << "Dog nameis: " << Dog->name<< endl;

    return 0;
}

二、类的访问控制

public:公有属性,凡是在它下面声明的变量和函数,都可以在类的内部和外部访问。
private: 私有属性,凡是在它下面声明的变量和函数,只能在类的内部访问。
protected: 保护属性,凡是在它下面声明的变量和函数,只能在类的内部以及派生类(子类)中访问。

(1)公有属性、私有/保护属性使用区别:

#include <iostream>
using namespace std;

// 定义一个动物的类
class Animal
{
	public:        //手动设置为公有属性,即实例化的对象可以直接访问
	    void EatFood() {  // 类的成员函数
	        cout << "我要吃食物" << endl;
	    }
	    char *name; //类的数据成员 
	private:
	    int number;
	protected:
	    char Test[100];
};

int main() {
    // 创建类的对象
    Animal Cat;
    Cat.EatFood();  //公有属性可以直接访问
   /*
     私有属性和保护属性不可以直接用对象访问
      Cat.number=2;
      Cat.Test="hhhh";
   */
    return 0;
}

(2)访问私有属性和保护属性:

私有属性和保护属性,只能内部访问,如通过类内部的成员函数进行访问。
● student.h

//student.h
#ifndef _STUDENT_H_
#define _STUDENT_H_
#include <iostream>
using namespace std;
class Student
{
    public:
        int GetAge();   //声明类的成员函数,在函数的其它地方实现
        int SetAge(int student_age);
    private:
        int age;
        char name[32];
};
#endif

● student.cpp

#include "student.h"

int Student::SetAge(int student_age)
{
    age= student_age;
}
int Student::GetAge()   //在student.cpp中可以实现类的函数
{
    return age;      //返回私有属性成员
}

● main.cpp

#include "student.h"
int main(int argc, char const *argv[])
{
    Student qjl;
    qjl.SetAge(18);
    cout<<qjl.GetAge()<<endl;
    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

吴恩达机器学习-可选实验室:特征工程和多项式回归(Feature Engineering and Polynomial Regression)

文章目录 目标工具特征工程和多项式回归概述多项式特征选择功能备用视图扩展功能复杂的功能 恭喜! 目标 在本实验中&#xff0c;你将:探索特征工程和多项式回归&#xff0c;它们允许您使用线性回归的机制来拟合非常复杂&#xff0c;甚至非常非线性的函数。 工具 您将利用在以…

PageHelper 又给我上了一课!

多年不用PageHelper了&#xff0c;最近新入职的公司&#xff0c;采用了此工具集成的框架&#xff0c;作为一个独立紧急项目开发的基础。项目开发起来&#xff0c;还是手到擒来的&#xff0c;但是没想到&#xff0c;最终测试的时候&#xff0c;深深的给我上了一课。 # 我的项目发…

SpringCloud-SpringBoot读取Nacos上的配置文件

在 Spring Boot 应用程序中&#xff0c;可以使用 Spring Cloud Nacos 来实现从 Nacos 服务注册中心和配置中心读取配置信息。以下是如何在 Spring Boot 中读取 Nacos 上的配置文件的步骤&#xff1a; 1. 引入依赖 首先&#xff0c;在 Spring Boot 项目的 pom.xml 文件中添加 …

2007-2022年上市公司迪博内部控制评价缺陷数量数据

2007-2022年上市公司迪博内部控制评价缺陷数量数据 1、时间&#xff1a;2007-2022年 2、范围&#xff1a;上市公司 3、指标&#xff1a;证券代码、证券简称、辖区、证监会行业、申万行业、是否存在财报内控重大缺陷、财报内控重大缺陷数量、是否存在财报内控重要缺陷、财报内…

亚信安慧AntDB:“融合+实时”引领数据库创新

在当今多变的数据应用场景中&#xff0c;AntDB作为行业领先的超融合流式实时数仓&#xff0c;秉承着“融合实时”的研发理念&#xff0c;全面应对企业日益复杂的数据处理需求。通过SQL接口访问多种执行引擎&#xff0c;AntDB在实现交易、分析等多重能力的“超融合”方面取得了显…

智能指针基础知识【C++】【RAII思想 || unique_ptr || shared_ptrweak_ptr || 循环引用问题】

目录 一&#xff0c;为什么需要智能指针 二&#xff0c;内存泄露的基本认识 1. 内存泄露分类 2. 常见的内存检测工具 3&#xff0c;如何避免内存泄露 三&#xff0c;智能指针的使用与原理 1. RAII思想 2. 智能指针 &#xff08;1. unique_ptr &#xff08;2. shared_…

CSS补充(下),弹性布局(上)

高级选择器 1.兄弟选择器 2.同时满足 div.bg{background-color: red;}p.bg{background-color: green;}spam.bg{background-color: blue;}注&#xff1a;选择器中间没有空格&#xff0c;有明确标识的选择器写在后面 3.各种伪类的应用 3.1作为第几个子元素 选择器:nth-child…

达梦数据库——如何查看数据库大字段中的数据内容

今天get到一个小知识点 分享给大家&#xff0c;如何在数据库查看大字段中的数据内容。 以下为演示步骤&#xff0c;简单易懂&#xff0c;操练起来吧 首先创建一个含有CLOB、TEXT的大字段测试表 create table "SYSDBA"."CS"("COLUMN_1" CLOB,&qu…

Xilinx 7系列 FPGA硬件知识系列(九)——FPGA的配置

1.3 端口配置 每组配置模式都有一组特定的接口管脚&#xff0c;它们跨越7系列FPGA上的一个或多个I/O BANK。7系列器件支持3.3V、2.5V、1.8V或1.5V的I/O配置&#xff0c;包括&#xff1a; BANK 0 中的JTAG管脚、BANK0中的专用配置管脚 BANK14和BANK15中与特定配置模式相关的管…

Windows下Node.js安装保姆级教程

一、Node.js 下载 访问Node.js官网&#xff0c;点击下载Node.js 下载完成后即可在下载文件中查看安装包 二、安装 一&#xff09;点击安装包开始安装&#xff0c;进入Weclcome界面点击Next 二&#xff09;勾选同意协议&#xff0c;点击Next 三&#xff09;根据需要选择安装路…

a-calendar的日历如何汉化

ant design中的日历默认拿来用时英文的&#xff0c;如何汉化&#xff0c;如下操作&#xff0c;在日历组件外面包一个<a-config-provider></a-config-provider> &#xff0c;如下操作&#xff1a; <template><a-config-provider :locale"zhCN"&…

合并有序数组

合并有序数组 题目描述&#xff1a;解法思路&#xff1a;解法代码&#xff1a;运行结果&#xff1a; 题目描述&#xff1a; 输入两个升序排列行的序列&#xff0c;将两个序列合并为一个有序序列并输出。 输入包含三行&#xff0c;第一包含两个正整数n, m&#xff0c;用空格分隔…

【Web安全】htaccess攻击

.htaccess攻击 文章目录 .htaccess攻击1. .htaccess文件2. 常见用法2.1. 自定义出错界面2.2. 强制文件执行方式2.3. PCRE绕过正则匹配2.4. php_value修改php设定2.5. php_value文件包含2.6. 把htaccess当作php 1. .htaccess文件 .htaccess是Apache网络服务器一个配置文件&#…

JavaWeb——014SpringBoot原理(配置优先级、Bean管理、SpringBoot原理)

SpingBoot原理 目录 SpingBoot原理1. 配置优先级2. Bean管理2.1 获取Bean2.2 Bean作用域2.3 第三方Bean 3. SpringBoot原理3.1 起步依赖3.2 自动配置3.2.1 概述3.2.2 常见方案3.2.2.1 概述3.2.2.2 方案一3.2.2.3 方案二 3.2.3 原理分析3.2.3.1 源码跟踪3.2.3.2 Conditional 3.2…

【Linux】第四十站:线程概念

文章目录 一、线程二、Linux中线程应该如何理解三、重新定义线程四、四谈进程地址空间&#xff08;页表相关&#xff09;五、Linux线程周边的概念1. 线程与进程切换2.线程优点3.线程缺点4.线程异常5.线程用途 一、线程 线程&#xff1a;是进程内的一个执行分支。线程的执行粒度…

事务失效问题

1&#xff0c;事务方法非public修饰 由于Spring的事务是基于AOP的方式结合动态代理来实现的。因此事务方法一定要是public的&#xff0c;这样才能便于被Spring做事务的代理和增强。 2&#xff0c;非事务方法调用事务方法 Service public class OrderService {public void creat…

Linux grep

文章目录 1. 基本用法2.字符转义3.二进制文件查找4.打印目标字段的附近行4. 多条件过滤5. 目录中过滤——用于在文件夹中筛选/排除指定后缀文件6.反向过滤——用于筛选7.只输出匹配内容——用于统计8. 筛选出包含字段的文件9.正则匹配10.管道和grep11.grep和wc/uniq/sort的合用…

【考研数学】李林《880》vs 李永乐《660》完美使用搭配

没有说谁一定好&#xff0c;只有适不适合自身情况&#xff0c;针对自身弱点选择性价比才最高。 两者侧重点不同&#xff0c;660适合强化前期&#xff0c;弥补基础的不足&#xff0c;880适合强化后期&#xff0c;题型全面&#xff0c;提高我们对综合运用知识的能力。 选择习题…

2.4_1 死锁的概念

文章目录 2.4_1 死锁的概念&#xff08;一&#xff09;什么是死锁&#xff08;二&#xff09;死锁、饥饿、死循环的区别&#xff08;三&#xff09;死锁产生的必要条件&#xff08;四&#xff09;什么时候会发生死锁&#xff08;五&#xff09;死锁的处理策略 总结 2.4_1 死锁的…

MySQL 存储过程(超详细)

一、什么是存储过程&#xff1f; 存储过程可称为过程化SQL语言&#xff0c;是在普通SQL语句的基础上增加了编程语言的特点&#xff0c;把数据操作语句(DML)和查询语句(DQL)组织在过程化代码中&#xff0c;通过逻辑判断、循环等操作实现复杂计算的程序语言。换句话说&#xff0c…