类的定义

news2024/9/9 4:01:02

一、定义类

类(class)是用户自定义数据类型。如果程序中要使用类类型,必须根据实际需要定义,或者使用已设计好的类。

class 类名 {
    成员列表
};

类可以没有成员,也可以有多个成员。类成员可以是数据或者函数。所有成员必须在类的内部声明,一旦类定义完成后,就没有任何其他方式可以再增加成员了。

class Data{
    void set(int d);
    int get() {
        return data;
    }
    int data;
};

void Data::set(int d)
{
    data = d;
}

二、成员的访问控制

对类的成员进行访问,来自两个访问源:类成员和类用户。

类成员指类本身的成员函数,类用户指类外部的使用者,包括全局函数、另一个类的成员函数等。

无论数据成员还是函数成员,类的每个成员都有访问控制属性,由public、private、protected等说明。

(1)公有成员:public,类成员和类用户都可以访问公有成员,任何一个来自类外部的类用户都必须通过公有成员来访问。public:实现类的外部接口。

(2)私有成员:private,类成员可以访问私有成员,类用户的访问是不允许的。private:实现了私有成员的隐蔽。

(3)保护成员:protected,在不考虑继承的情况下,protected与private一致,但保护成员可以被派生类的类成员访问。

class Data {
    int a, b;
public:
    void set(int i, int j, int k, int l, int m, int n)
    {
        a = i;
        b = j;
        c = k;
        d = l;
        e = m;
        f = n;
    }
protected:
    int c, d;
private:
    int e, f;
};

三、类的数据成员

类的数据成员可以是基本类型、数组、指针、引用、共用体、枚举类型、void指针、const限定等数据类型。

class ADT{
    struct Point {int x, y;};
    union UData {Point p; long color};
    enum COLORS {RED, GREEN, BLUE, BLACK, WHITE};
    class Nested{
        Point start;
        UData end;
        COLORS color;
    }
    typedef Point* LPPOINT;
};

四、在类的外部定义成员函数

class Data{
public:
    void set(int d);
    int get() {
        return data;
    }
private:
    int data;
};

void Data::Set(int d)
{
    data = d;
}

1. (::)是作用域限定符

2. 在成员函数中可以访问这个类的任何成员,无论它是公有的或是私有的,是类内部声明的还是类外部定义的。

3. 在类的内部声明成员函数,而在类的外部定义成员函数,可以减少类体的长度,使类体结构清晰,便于阅读,而且有助于类的接口和实现分离。

4. 如果一个成员函数,其函数体不太复杂,只有4~5行时,一般可在类体中定义。

内联成员函数

默认情况下,在类体中定义的成员函数若不包括循环等控制结构,符合内联函数要求时,C++会自动将它们作为内联函数处理(隐式inline)。

也可显式地将成员函数声明为inline

 

成员函数重载及默认参数

class MAX {
    int Max(int x, int y) {return x>y?x:y;}
    int Max()
    {
        return Max(Max(a, b), Max(c, d));
    }
    int Set(int i=1, int j=2, int k=3, int l=4)
    {
        a = i;
        b = j;
        c = k;
        d = l;
    }
    int a, b, c, d;
}

成员函数的存储方式

 C++把成员函数的代码存储在对象空间之外的地方。

五、类的声明

类不能具有自身类型的数据成员,然而,只要类名一经出现就可以认为该类已声明。因此,类的数据成员可以是指向自身类型的指针。

 

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

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

相关文章

Java项目作业~ 创建基于Maven的Java项目,连接数据库,实现对站点信息的管理,即实现对站点的新增,修改,删除,查询操作

需求: 创建基于Maven的Java项目,连接数据库,实现对站点信息的管理,即实现对站点的新增,修改,删除,查询操作。 以下是站点表的建表语句: CREATE TABLE websites (id int(11) NOT N…

动态路由协议 ospf

动态路由协议的分类 rip : 距离矢量路由协议(容易产生环路)ospf: 链路状态路由协议(比较耗费资源,但是链路准确性好)bgp: 外部网关协议 RIP OSPF LSA泛洪 LSDB维护 SPF计算(最短路…

指令重排相关

指令流水线所带来的一些问题 结构冒险 流水线中出现硬件资源竞争 数据冒险 流水线中后面的指令需要等待前面指令完成数据的读写 控制冒险 流水线需要个怒前面指令的执行结果来决定下一步去哪儿之行 为了解决指令流水线的数据冒险所带来的停顿、CPU 搞了个乱序执行。 在遇到数…

关于Godot游戏引擎制作流水灯

先上核心代码 游戏节点 流水灯的通途可以是 1. 装饰 2. 音乐类多媒体程序(如FL中TB-303的步进灯) FL Studio Transistor Bass

TypeScript 中【class类】与 【 接口 Interfaces】的联合搭配使用解读

导读: 前面章节,我们讲到过 接口(Interface)可以用于对「对象的形状(Shape)」进行描述。 本章节主要介绍接口的另一个用途,对类的一部分行为进行抽象。 类配合实现接口 实现(impleme…

8.7工作总结

一、我们想自定义一个titileBar出现如下这种情况,发现他原来的titileBar还未隐藏。 后来我尝试修改主题使得他没有主题noActionBar发现也不行,后来我参考原先我看过的项目使用了如下代码 this.getActionBar().hide();发现会报这个错误java.lang.NullPoi…

30.基于XML的声明式事务

基于XML的声明式事务 主要是使用XML去代替注解&#xff0c;来实现起到代替注解的作用&#xff0c;实际使用频率很低 将BookServiceImpl.java中的Transactional注解删除&#xff0c;确保用户余额充足 spring-tx-xml.xml <?xml version"1.0" encoding"UTF-8…

Android AccessibilityService研究

AccessibilityService流程分析 AccessibilityService开启方式AccessibilityService 开启原理 AccessibilityService开启方式 . 在Framework里直接添加对应用app 服务component。 loadSetting(stmt, Settings.Secure.ACCESSIBILITY_ENABLED,1); loadSetting(stmt, Settings.Se…

mybatis-plus的update方法,到底会不会更新null值?看这一篇就够了

普通的设置值。需要传入一个Wrapper对象 默认情况下是不会更新null值的&#xff0c;也就是只更新设置值的字段 LambdaUpdateWrapper<OrderChildRoom> orderChildRoomUpdateWrapper new LambdaUpdateWrapper<>();orderChildRoomUpdateWrapper.set(OrderChildRoo…

【PDF密码】PDF文件不能打印,为什么?

正常的PDF文件是可以打印的&#xff0c;如果PDF文件打开之后发现文件不能打印&#xff0c;我们需要先查看一下自己的打印机是否能够正常运行&#xff0c;如果打印机是正常的&#xff0c;我们再查看一下&#xff0c;文件中的打印功能按钮是否是灰色的状态。 如果PDF中的大多数功…

面试热题(滑动窗口最大值)

给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 输入&#xff1a;nums [1,3,-1,-3,5,3,6,7], k 3 输出&#xff1a;[3,3,5,…

SpringCloud实用篇1——eureka注册中心 Ribbon负载均衡原理 nacos注册中心

目录 1 微服务1.1 微服务的演变1.2 微服务1.3 SpringCloud1.4 小结 2 服务拆分及远程调用2.1 服务拆分2.2 服务拆分案例2.3 实现远程调用2.4 提供者与消费者 3 Eureka注册中心3.1 Eureka的结构和作用3.2 搭建eureka-server3.3 服务注册3.4 服务发现 4 Ribbon负载均衡4.1 负载均…

ubuntu18.04安装docker及docker基本命令的使用

官网安装步骤&#xff1a;https://docs.docker.com/desktop/install/ubuntu/ docker快速入门教程 Ubuntu-Docker安装和使用 docker官网 docker-hub仓库 1、常用指令 &#xff08;1&#xff09;镜像操作 # ############################# 以nginx为例 docker images docker p…

爬虫010_列表高级_添加_append_extend_修改_查询_in_not int_删除_del_pop_remove---python工作笔记029

然后再来看列表操作 首先添加append方法 然后插入,坐标是要插入的下标,右边是插入的内容 看结果 1,2,3,4,5,6 然后这个extend,是逐个插入,放到后边 然后是修改,直接对下标赋值 看结果</

宝塔面板点击SSL闪退打不开怎么解决?

宝塔Linux面板点击SSL证书闪退如何解决&#xff1f;旧版本的宝塔Linux面板确实存在这种情况&#xff0c;如何解决&#xff1f;升级你的宝塔Linux面板即可。新手站长分享宝塔面板SSL闪退的解决方法&#xff1a; 宝塔面板点击SSL证书闪退解决方法 问题&#xff1a;宝塔Linux面板…

创建独立 Python 环境的工具venv

venv 是一种用于创建独立 Python 环境的工具。这些隔离环境可以具有单独的 Python 软件包版本&#xff0c;以便将一个项目的依赖项与其他项目的依赖项隔离开来。我们建议您在使用 Python 进行本地开发时始终使用每个项目的虚拟环境。 1.使用 venv 命令创建整个 Python 安装的虚…

Vue系列第七篇:Element UI之el-main,el-table,el-dialog,el-pagination,el-breadcrumb等控件使用

本篇实现主页面功能&#xff0c;包括主页面排版布局&#xff0c;学生管理模块实现&#xff0c;后台接口实现等功能。 目录 1.运行效果 1.1登录页面 1.2主页面 1.3学生管理 - 信息列表 1.4学生管理 - 信息管理 1.5学生管理 - 作业列表 1.6学生管理 - 作业管理 2.前端代码…

Spring MVC简介与概述

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

设计模式之六:命令模式(封装调用)

命令模式可以将请求的对象和执行请求的对象解耦&#xff08;实际上是通过命令对象进行沟通&#xff0c;即解耦&#xff09;。&#xff08;个人感觉&#xff0c;这章讲的很一般&#xff09; 按个人理解来讲&#xff1a; 假如需要一个遥控器&#xff0c;遥控器有一个插口可以插上…