C++类别(建构函数、初值串列、EXPLICIT指示词)

类别-

类别(class) 是物件(object) 的模板,物件的所有功能都由类别设置。

典型的类别设计如下

class class_name {
access_label_1:// memberaccess_label_2:// member
};

利用关键字(keyword) class宣告类别名称,其后的大括弧为类别的宣告内容,里头用存取标签(access label) 区分成员(member) 的权限。存取标签有三种,分别是public、private与protected,这三个标签也都属于关键字。

public成员可以由所有使用物件的地方自由呼叫,private成员则限制在类别中呼叫,也就是类别的成员才可以使用private成员,protected成员的使用范围与private成员相同,但是private成员不能被继承(inheritance ) ,protected成员则可以被继承。

如果在类别宣告中没有写存取标签的话,预设为private

使用private成员可达到把资料封装(encapsulation) 的目的,此为物件导向程式设计(object-oriented programming) 的主要特性之一。

成员可以是变数(variable) 或函数(function) ,前者称为资料成员(data member) ,这是专属于物件的变数,后者则称之为成员函数(member function) ,这也是专属于物件的函数,需要透过物件进行呼叫。

注意,大括弧最后的分号是必须的。举一例如下

#include <iostream>class Demo {
public:int a;int b;int do_something() {return a + b;}
};int main() {Demo d;d.a = 11;d.b = 22;std::cout << d.do_something() << std::endl;return 0;
}

此例宣告了类别Demo,里头有三个成员,两个int变数与一个回传int的函数

class Demo {
public:int a;int b;int do_something() {return a + b;}
};

然后在main()宣告Demo型态的变数d,此时Demo型态的物件d已建立,接着再用小数点运算子设定两个资料成员

Demo d;
d.a = 11;
d.b = 22;

编译执行,结果如下

$ g++ u09.cpp
$./a.out 复制代码
33
$

我们是把成员函数的定义放到类别宣告中,成员函数的定义可以移出类别宣告,这样的类别宣告就是单纯的宣告

class Demo {
public:int a;int b;int do_something() ;
};

这样成员函数的实作就移出类别宣告外,在函数名称前要加上类别名称与作用域运算子,如下

int Demo::do_something() {return a + b;
}

通常类别的宣告会放到标头档里,而成员函数的实作会放到实作档中。

下面我们分成数个部分介绍C++ 的类别




  •  

建构函数

建构函数(constructor) 是一种特别的成员函数,与类别同名并且没有回传值(return value) ,因为这是在类别实际建立物件时执行的函数。如果自己没有定义建构函数,编译器(compiler) 会补上预设的建构函数。
 

预设的建构函数是没有参数(parameter) 的函数版本,我们同样举个没有参数的建构函数例子如下

#include <iostream>class Demo {
public:int a;int b;Demo() {std::cout << "constructor.." << std::endl;a = 22;b = 33;}int do_something() {return a + b;}
};int main() {Demo d;std::cout << d.do_something() << std::endl;return 0;
}

此例的建构函数被呼叫时,会先印出英文讯息,然后设定两个资料成员

编译执行,结果如下

$ g++ u0901_1.cpp
$./a.out 复制代码
构造函数..
55
$

下例将Demo改写成Demo2,增加另一个有参数的建构函数

#include <iostream>class Demo2 {
public:int a;int b;Demo2() {a = 22;b = 33;}Demo2(int pa, int pb) {a = pa;b = pb;}int do_something() {return a + b;}
};int main() {Demo2 d(33, 44);std::cout << d.do_something() << std::endl;return 0;
}

新版本的建构函数有两个参数,分别用来设定两个资料成员

Demo2(int pa, int pb) {a = pa;b = pb;
}

这样宣告Demo型态的变数d时,就要用小括弧加上参数列(parameter list)

$ g++ u0902.cpp
$./a.out 复制代码
构造函数..
99
$

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

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

相关文章

代理IP在数据采集中具体有哪些作用

在当今信息化高速发展的时代&#xff0c;从市场趋势分析到消费者行为预测&#xff0c;从产品优化到服务改进&#xff0c;大数据都在其中扮演着不可或缺的角色。但数据的采集、整理和分析并非易事&#xff0c;特别是在面对海量的网络数据时&#xff0c;我们往往需要借助一些技术…

python3.12 String类方法大全

字符串相关链接 类型细分与链接注释 字面值 转义字符字符串字符串基础方法拼接, 索引, 路径, 长字符串分行等等内置类型str 字符串的方法 见下表 printf 风格的字符串格式化 format % values 标准库string 字符串常量字符串模块中定义的常量class string.Formatter 自定义字符…

前端 SSE 长连接

使用 const options {withCredentials: true, // 默认 false}const eventSource new EventSource(/api, options);eventSource.addEventListener(open, () > {});eventSource.onmessage (event) > {}; // 或addEventListener(message,callback)eventSource.addEvent…

程序员拔火罐技能的分享

一.背景 之前为了考“中医康复理疗师”的证书&#xff0c;自学了拔火罐。自学主要是在自己大腿上练习&#xff0c;然后拿家人做小白鼠。后来考试没有那么严格也就顺利通过了。操作过程中&#xff0c;积累的一些小知识&#xff0c;分享给大家&#xff0c;有空在家里给家人服务体…

CTF ssrf 基础入门 (一)

0x01 引言 我发现我其实并不是很明白这个东西&#xff0c;有些微妙&#xff0c;而且记忆中也就记得Gopherus这个工具了&#xff0c;所以重新学习了一下&#xff0c;顺便记录一下吧 0x02 辨别 我们拿到一个题目&#xff0c;他的名字可能就是题目类型&#xff0c;但是也有可能…

【CSS】继承属性

属性继承 1. 字体系列属性 字体系列属性主要包括&#xff1a; font-size、font-family、font-variant、font-style、font-weight、font、letter-spacing、word-spacing、text-transform 和 line-height。如果没有在⼀个元素上设置这些属性&#xff0c;则其继承上层的相应属性…

FastAPI(七十三)实战开发《在线课程学习系统》接口开发-- 回复留言

源码见&#xff1a;"fastapi_study_road-learning_system_online_courses: fastapi框架实战之--在线课程学习系统" 之前文章分享FastAPI&#xff08;七十二&#xff09;实战开发《在线课程学习系统》接口开发-- 留言列表开发&#xff0c;这次我们分享如何回复留言 按…

Jenkins+Gitlab持续集成综合实战

一、持续集成应用背景&#xff1a; DevOps&#xff1a;&#xff08;英文Development&#xff08;开发&#xff09;和Operations&#xff08;技术运营&#xff09;的组合&#xff09;是一组过程、方法与系统的统称&#xff0c;用于促进开发&#xff08;应用程序/软件工程&#…

NCRE3 2-1 网络总体设计基本方法

这部分记忆的比较多 概览 设计网络建设总体目标确定网络系统方案设计原则网络系统总体设计设计网络拓扑结构进行网络设备选型网络系统安全设计 设计网络建设总体目标 这部分视频没说到 确定网络系统方案设计原则 这部分视频没说到 网络系统总体设计 核心层网络结构设计 …

Mysql的MHA

Mysql的MHA 一、MHA 1、什么是MHA&#xff1f; 高可用模式下的故障切换&#xff0c;基于主从复制 单点故障和主从复制不能切换的问题 至少需要3台 故障切换过程0~30秒 vip地址&#xff0c;根据vip地址所在的主机&#xff0c;确定主备 主 vip 备 vip 主和备不是优先确定…

嵌入式Linux八股(四)——MCURTOS

嵌入式Linux八股完整文章目录 嵌入式Linux八股&#xff08;一&#xff09;——语言篇_嵌入式软件八股-CSDN博客 嵌入式Linux八股&#xff08;二&#xff09;——Linux_linux嵌入式的八股文有哪些-CSDN博客 嵌入式Linux八股&#xff08;三&#xff09;——计算机基础_嵌入式哪…

DM(DataMart)增量表

DM&#xff08;DataMart&#xff09;增量表通常指的是在数据仓库或数据集市中的增量表。这些表格用于存储每日或每周等时间段内新增的数据&#xff0c;以便在后续的分析和报告中使用。 特点和作用&#xff1a; 1.存储增量数据&#xff1a;DM增量表存储了相对于上一次抽取或加载…

【Vue实战教程】之Vue工程化项目详解

Vue工程化项目 随着多年的发展&#xff0c;前端越来越模块化、组件化、工程化&#xff0c;这是前端发展的大趋势。webpack是目前用于构建前端工程化项目的主流工具之一&#xff0c;也正变得越来越重要。本章节我们来详细讲解一下如何使用webpack搭建Vue工程化项目。 1 使用we…

基于Python的哔哩哔哩国产动画排行数据分析系统

需要本项目的可以私信博主&#xff0c;提供完整的部署、讲解、文档、代码服务 随着经济社会的快速发展&#xff0c;中国影视产业迎来了蓬勃发展的契机&#xff0c;其中动漫产业发展尤为突出。中国拥有古老而又璀璨的文明&#xff0c;仅仅从中提取一部分就足以催生出大量精彩的…

【C# 】 一个List<T> 如何快速的知道里面的最大、最小、平均值呢?

在C#中&#xff0c;要从一个List<T>中找到最大值、最小值和平均值&#xff0c;首先需要确保列表中的元素类型支持这些操作&#xff08;例如int、ushort或double&#xff09;。 这里使用LINQ&#xff08;Language Integrated Query&#xff09;来简化这些计算。 如果使用…

源码拆解SpringBoot的自动配置机制

SpringBoot相比于Spring系列的前作&#xff0c;很大的一个亮点就是将配置进行了简化&#xff0c;引入了自动化配置&#xff0c;仅靠几个注解和yml文件就取代了之前XML的繁琐配置机制&#xff0c;这也是SpringBoot的独有特点&#xff0c;下面我们从源码角度&#xff0c;一点点拆…

Golang | Leetcode Golang题解之第273题整数转换英文表示

题目&#xff1a; 题解&#xff1a; var (singles []string{"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"}teens []string{&…

IEC61850 协议解读

1. IEC61850 协议介绍 IEC 61850 是定义 变电站 自动化系统 中 设备 及设备之间相互交互的 国际标准。 给出英文定义&#xff1a;IEC 61850 is the international standard for defining devices within substation automation systems and how they interact with one anoth…

Java基础-Java多线程机制

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 一、引言 二、多线程的基本概念 1. 线程与进程 2. 多线程与并发 3. 多线程的优势 三、Java多线程的实…

git命令使用详细介绍

1 环境配置 设置的信息会保存在~/.gitconfig文件中 查看配置信息 git config --list git config user.name设置用户信息 git config --global user.name "有勇气的牛排" git config --global user.email “1809296387qq.com”2 获取Git仓库 2.1 本地初始化一个仓…