类及对象

news/2025/3/31 18:01:26/文章来源:https://www.cnblogs.com/yerosius/p/18799026

类及对象

C++是一种面向对象(OOP)的语言,强调抽象、封装、多态、继承、可重用性等,类(class)是组成OOP的重要特性。

类的声明

class关键字声明一个类。

class 类名{
访问控制符://成员
};

成员可以为成员变量、成员函数等。一般地,将类的成员函数称为类的方法

类似于结构体,在创建类的声明时不会为成员分配内存;仅当对象(类变量)被定义时才会被分配内存。

访问控制标签

访问控制标签限定了外部(位于该类之外)对类成员的可访问性,限定范围为从该标签至下个标签间的所有成员。

  • public:成员可被外部访问。
  • private:默认标签,成员不可被外部访问,仅可被内部方法和友元函数访问。若成员未被指定标签,则其默认为private
  • protected

C++扩展了结构体,使其大多数功能类似于类。唯一不同之处在于,class默认标签为privatestruct默认标签为public

对象的定义

对象是指使用类所定义的实例,定义对象方法类似于定义结构体变量。

类名 变量名;

对象各自有有自己的数据,但共享一组方法。

成员的访问

类似于结构体,使用对象名.成员进行访问。例:

class temp{
public:int x;void fun(int a,int b){//code}
};
temp t;t.x;//访问变量
t.sum(1,2);//访问方法

方法的实现

  • 边声明边定义:

    class temp{
    public:void fun(int a,int b){//code}
    };
    
  • 先声明后定义:定义时需使用作用域解析运算符(::)以标识函数所属的类,即类名::函数名(形参表)

    class temp{
    public:void add(int,int);
    };
    void temp::add(int a,int b){//code
    }
    

构造函数

专门用于初始化类中成员变量的函数,其与类名同名,没有返回值,且必须被public标签修饰。

当类无构造函数时,编译器会自动为对象创建空的构造函数。

构造函数可使用默认参数。若定义了构造函数,则在定义对象时必须调用构造函数,为无默认参数的其他形参提供实参。

  • 边声明边定义

    class temp{int a;
    public:temp(int x){//code}
    };
    
  • 先声明后定义

    class temp{int a;
    public:temp(int);
    };
    temp::temp(int x){//code
    }
    
  • 定义对象:定义对象时必须调用构造函数,为无默认参数的其他形参提供实参。

    temp t(10);//隐式调用
    temp t=temp(10);//显式调用
    

析构函数

专门用于销毁成员的函数(如经过动态分配内存得到的成员变量),其名为~类名,没有返回值,且必须被public标签修饰。

若成员变量均为块作用域的局部变量,其将被自动销毁释放,无需析构函数。

当类无析构函数时,编译器会自动为对象创建空的析构函数。

  • 边声明边定义

    class temp{
    public:int *a=NULL;temp(){a=new int;}~temp(){delete a;}
    };
    
  • 先声明后定义

    class temp{int *a=NULL;temp();~temp();
    };
    temp::temp(){a=new int;
    }
    temp::~temp(){delete a;
    }
    

注意:以上代码仅供构造函数与析构函数的示例,实际上其存在浅拷贝问题。请不要这么使用!

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

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

相关文章

VGG

VGG 网络LRN(Local Response Normalization)来自于AlexNet现在已经不怎么使用,因为经过很多实验并没有较大的作用 conv的stride为1,padding为1 maxpool的size为2,stride为2感受野叠加 论文中一个比较重要的使用就是感受野的叠加 感受野(Receptive Field)是卷积神经网络中一…

日语声调

日语声调的记忆 方法1方法2方法3日语声调的标记方法 方法1:划线规律1:第1个音 和 第2个音不是同音 规律2:出现降音就不会升回去 规律3:“高-低”在第几个音出现,就是几型 方法2:数字

荧光灯下的“绚烂”

“绚烂”这一可以令人愉悦的词汇,在航空发动机研制过程中,却给人另外的意味。荧光检测荧光检测 荧光检测是一种在零件表面进行的无损检测,可用于检测航空发动机零部件因疲劳、撞击、机加、淬火、锻造、铸造过载等因素造成的各种裂纹、接缝等表面缺陷。 当荧光检测应用在航…

课堂里的人工智能,或者说,狂野西部闯进了教育界

诺米科托博士(Normi Coto, PhD)配图来自 Unsplash 的 Element5 Digital3 月 15 日星期六,我参加了一场名为“人文学科中的 AI”的职业发展工作坊。会场人满为患,坐满了来自弗吉尼亚州中学和高中的英语和历史老师。来自弗吉尼亚大学和朗伍德大学的教授主持了这次工作坊,主题…

LED数码管显示独立按键次数

前言 目标 2个独立按键,按下K1,数码管显示的数字加1 按下K2,数码管显示的数字减1 效果 https://www.bilibili.com/video/BV1aXo9YxEhY原理独立按键,用于控制数字的加减把完整的数字,分成若干数位显示构造一个函数 show_digit(pos,digit) , 可以在指定位置(0<=pos<=7…

Bitcoin部署到openEuler RISC-V

Bitcoin项目源码是用C++写的,我对C++以及它的编译工具又比较熟悉,这次我尝试了在openEuler RISC-V 24.09上面部署Bitcoin。网上编译Bitcoin源码的很多都是以前旧版的,旧版编译是用automake之类的工具,但是在最新版只需要用cmake就行,两者的部署方式不相同,我分别记录一下…

NVIDIA安装程序无法继续

原因 在更新驱动时,手贱,下驱动一半关闭了下载流程。导致下载失败,而且进入不了Geforece 解决方法:官网下载最新版驱动,再尝试。 如果不行,检查Windows更新,更新至最新版本 重启后如果不可行,再关闭杀毒软件,关闭防火墙,再尝试,重启再尝试。 如果还是不行,使用卸载…

锚定碳中和,三重角色重构,运营商的第四次跃迁

「 作为能源消耗大户,运营商在面对碳中和的级终命题时需要转变发展思路、转变角色定位。」5G+AI倒逼运营商基础设施建设大规模提速,运营商要更好的生存发展必须要降本提效,碳中和的大目标则要求运营商在快速发展的同时还要破解能源消耗指数级增长的魔咒——这似乎是一个不可…

SpringBoot整合RabbitMQ--Fanout模式

使用springBoot整合rabbitMQ需要事先导入相关依赖:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency><dependency><groupId>org.springframework.bo…

查看网站支持的tls版本

f12 打开chrome 开发面板本文由 trykle 发布联系方式:QQ 294986636本文地址:https://www.cnblogs.com/trykle/p/18798939

解析PromQL并修改添加Label

最近做的项目中用到了Prometheus做预警服务,其中Prometheus使用promql语言来查询。项目中用户通过UI或者自己手动输入PromQL时候是缺少一些系统参数的,所以需要在用户输入完成以后同步到Prometheus时候将这部分缺失的信息给添加回去,这里就需要修改用户写的PromQL了。 实现思…

学习安装配置vue

1.先将nodejs下载2.在我们的安装目录下,创建名为node_cache和node_global的两个文件夹 3.打开cmd窗口,执行如下命令,将npm的全局模块目录和缓存目录配置到刚才创建的那两个目录。 npm config set prefix “D:\soft2024.7.6\nodejs\node_global” npm config set cache “D:\…