当前位置: 首页 > news >正文

类的定义与实例化

一.类的定义

1.1 格式

        定义类的一般格式如下:

class  类名{
public:公有成员列表;
protected:保护成员列表;
private:私有成员列表;
};

         构成元素:

(1)类头(class head)

        “class 类名”称为类头。

(2)类体(class body)

        花括号{ }中的部分称为类体(class body).

(3)类成员表(class member list)

        类体中定义了类成员表。

 1.2 访问限定符

        访问限定符有三种,如表1所示。

序号访问限定符作用
1public表示公共的,外部可访问其成员
2protected表示保护的,外部不能访问其成员
3private表示私有的,外部不能访问其成员

        如果在类体起始点无访问限定符,系统默认定义为private。

1.3 注意事项

1.类是一种数据类型,定义时系统不为类分配存储空间,所以不能对类的数据成员初始化。

2.类中的任何数据成员也不能使用关键字extern、auto或register限定其存储类型。

3.成员函数可以直接使用类定义中的任一成员,可以处理数据成员,也可调用函数成员。

1.4 成员函数的定义

1.4.1 类内定义

        直接在类体内定义函数。如下图所示。

1.4.2 类外定义

        在类体内声明函数,在类外定义函数。类外定义函数时,使用以下格式:

返回值类型 类名::函数名(参数表)
{……
}

           其中运算符“::”称为作用域解析运算符,它指出该函数是属于哪一个类的成员函数。如下图所示:

二.类的实例化——对象

        对象是类的实例。

2.1 创建方式

        有两种方法创建对象。

2.1.1 静态创建

        即在编译程序时创建。例如,

class CStudent
{
public:void set_age(int val);int get_age(void);
private:char name[50];int age;	
};int main(int argc, char** argv) {CStudent stu;//直接实例化对象return 0;
}

2.1.2 动态创建

        即在程序运行时创建。使用new创建。例如:

#include <iostream>
using namespace std;class CStudent
{
public:void set_age(int val);int get_age(void);
private:char name[50];int age;	
};int main(int argc, char** argv) {CStudent *pstu = new CStudent();delete pstu;return 0;
}

2.2 对象的存储方式

        有两种方式存储对象。

2.2.1 数据和函数都独立存储

        当在类内定义函数时,系统会为每个对象分配各自的“数据成员和函数成员”存储空间。如下图所示。

        这种方式会浪费内存空间。因为对象之间的属性(数据)有差异,但行为(函数)是一样的,这部分可以共用。

2.2.2 数据独立而函数共享存储

        当在类外定义函数时,系统会为每个对象分配各自的数据区,而成员函数区为各对象共用。如下图所示:

相关文章:

  • AI大模型学习:AI大模型在特定领域的应用
  • 华为OD七日集训第5期 - 按算法分类,由易到难,循序渐进,玩转OD
  • 工业无线网关在汽车制造企业的应用效果和价值-天拓四方
  • C# 多态 派生类 abstract virtual new
  • JSP基础
  • 登录拦截器
  • unity无法使用道路生成插件Road Architect(ctrl和shift无法标点)
  • SAP_MMQM模块-采购收货质量控制
  • 【八股】泛型
  • 深度学习pytorch——激活函数损失函数(持续更新)
  • SpringBoot+ElasticSearch实现文档内容抽取、高亮分词、全文检索
  • 【系统架构师】-第12章-信息系统架构
  • Python基础中易错点分享
  • UE4_旋转节点总结一
  • ubuntu16 apt安装程序锁死解决
  • 《Java编程思想》读书笔记-对象导论
  • 2017-09-12 前端日报
  • 2017届校招提前批面试回顾
  • Docker下部署自己的LNMP工作环境
  • github指令
  • java小心机(3)| 浅析finalize()
  • Lsb图片隐写
  • Material Design
  • Python进阶细节
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • 聊聊directory traversal attack
  • 微信小程序:实现悬浮返回和分享按钮
  • 学习使用ExpressJS 4.0中的新Router
  •  一套莫尔斯电报听写、翻译系统
  • 怎么将电脑中的声音录制成WAV格式
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • ​ssh免密码登录设置及问题总结
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (1)Nginx简介和安装教程
  • (2015)JS ES6 必知的十个 特性
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (C语言)字符分类函数
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (离散数学)逻辑连接词
  • (六)激光线扫描-三维重建
  • (实战篇)如何缓存数据
  • (未解决)macOS matplotlib 中文是方框
  • *p++,*(p++),*++p,(*p)++区别?
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .net Stream篇(六)
  • .NET 回调、接口回调、 委托
  • .net快速开发框架源码分享
  • /deep/和 >>>以及 ::v-deep 三者的区别
  • @Transaction注解失效的几种场景(附有示例代码)