C++入门(浅谈类和对象)

1 命名空间

1-1命名空间的定义

定义命名空间的目的是为了不与标识符的名称进行冲突,命名空间中可以定义函数,变量,类型。

比如:这里的rand和strlens其实是函数,在命名空间中可以避免与全局作用域中的rand函数和strlens函数冲突,其次命名空间还可以嵌套定义

同时一个命名空间定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
namespace bit
{
	int rand = 10;
	int strlens = 20;
	int Add(int a, int b)
	{
		return a + b;
	}
	class bit
	{
		int Sub(int a = 4, int b = 5)
		{
			return b - a;
		};
		double _money;
		float  _lucky;
		int _life;
	namespace character
	{
		char* next;
		int people;
	}
}

1-2命名空间的使用

方法1:加命名空间名称+作用域限定符

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
namespace bit
{
	int rand = 10;
	int strlens = 20;
	int Add(int a, int b)
	{
		return a + b;
	}
	class bit
	{
		int Sub(int a = 4, int b = 5)
		{
			return b - a;
		};
		double _money;
		float  _lucky;
		int _life;
	}*p;
	namespace character
	{
		char* next;
		int people=10;
	}
}
int main()
{
	cout << bit::character::people<< endl;
	return 0;
}

方法2:使用using将命名空间某个成员引入

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
namespace bit
{
	int rand = 10;
	int strlens = 20;
	int Add(int a, int b)
	{
		return a + b;
	}
	class bit
	{
		int Sub(int a = 4, int b = 5)
		{
			return b - a;
		};
		double _money;
		float  _lucky;
		int _life;
	}*p;
	namespace character
	{
		char* next;
		int people=10;
	}
}
using bit::Add;
int main()
{
	cout << Add(4,5)<< endl;
	return 0;
}

方法3:用using namespace将某个命名空间引入

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
namespace bit
{
	int rand = 10;
	int strlens = 20;
	int Add(int a, int b)
	{
		return a + b;
	}
	class bit
	{
		int Sub(int a = 4, int b = 5)
		{
			return b - a;
		};
		double _money;
		float  _lucky;
		int _life;
	}*p;
	namespace character
	{
		char* next;
		int people=10;
	}
}
using namespace bit;
using namespace character;
int main()
{
	cout <<people << endl;
	return 0;
}

2 C++输入和输出

C++的输入输出会自动识别类型,非常方便不像C那样需要printf指定类型输出,其次C++也是需要包含头文件的,输入流cout,输出流cin所需的头文件就是#include<iostream>,<<是流插入运算符,>>是流提取运算符,std是C++标准库的命名空间名,C++将标准库的定义和实现都放在这个命名空间里

3 缺省参数

调用的函数可以存在没有参数,或者参数缺省,下面来给大家示例

void fun(int a = 10)
{
	cout << a << endl;
}
int main()
{
	fun(2);
	fun();
	return 0;
}

存在多个参数时,不能隔着缺省,只能从右向左连续缺省

int fun(int a = 10,int b=6,int c = 8)
{
	return a + b + c;
}
int main()
{
	cout << fun(2, 4) << endl;
	cout << fun(4, 4, 4) << endl;
	cout << fun(5) << endl;
	fun(5);
	return 0;
}

4 函数重载

也就是说我可以用相同的函数名,但是参数类型不一样,编译器会自动识别函数参数类型进行相应的匹配

int fun(int a = 10,int b=6,int c = 8)
{
	return a + b + c;
}
void fun(char* p, char a, int b)
{
	cout << p << endl;
	cout << a << endl;
	cout << b << endl;
}
int main()
{
	char arr[15] = "I love China!";
	cout << fun(2, 4) << endl;
	fun(arr, 65, 4);
	return 0;
}

5 引用

引用也相当于取别名,比如你的名字一样有小名,有大名。

引用的变量其实就是这个变量本身,在语法上其实引用是别名和本名公用同一块空间的,

但是底层逻辑就不是了,底层逻辑就是指针。

int main()
{
	int a = 10;
	int& b = a;
	b = 100;
	cout << a << endl;
	
	return 0;
}

6 内联函数

内联函数其实是一种空间换时间的方式,内联函数会在调用它的地方展开,不会开辟函数栈帧,提高了程序的运行效率,但是如果你的内联函数的空间很大很大,那么编译器会自动把它的内联取消定义。

关键字修饰:inline

可以看到下面的汇编代码中根本没有为fun函数开辟栈帧只是调用而已

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

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

相关文章

编程性能调优方案

微信公众号转载&#xff0c;关注微信公众号掌握更多技术动态 --------------------------------------------------------------- 一、字符串与集合性能优化 1.String 对象的实现 在 Java 语言中&#xff0c;Sun 公司的工程师们对 String 对象做了大量的优化&#xff0c;来节…

2024测试开发面试题完整版本(附答案)

目录 1. 什么是软件测试&#xff0c; 谈谈你对软件测试的了解 2. 我看你简历上有写了解常见的开发模型和测试模型, 那你跟我讲一下敏捷模型 3. 我看你简历上还写了挺多开发技能的, 那你给我讲讲哈希表的实现流程 4. 谈一谈什么是线程安全问题, 如何解决 5. 既然你选择走测…

Java_泛型

泛型类 认识泛型 所谓泛型指的是&#xff0c;在定义类、接口、方法时&#xff0c;同时声明了一个或者多个类型变量&#xff08;如&#xff1a;< E >&#xff09;&#xff0c;称为泛型类、泛型接口、泛型方法、它们统称为泛型。 作用:泛型提供了在编译阶段约束所能操作的…

f盘隐藏的文件夹怎么找出来?介绍几种有效方法

在计算机中&#xff0c;我们经常会遇到隐藏的文件或文件夹&#xff0c;在F盘中隐藏的文件夹也不例外。隐藏的文件夹可能是由系统生成的&#xff0c;或者是用户自行设定的隐私文件夹。无论是因为误操作还是出于其他原因&#xff0c;如果你想找出F盘中的隐藏文件夹&#xff0c;本…

壹[1],函数:ReadImage

C形式 LIntExport void ReadImage( HObject* Image, const HTuple& FileName); //参数1&#xff1a;读取的Image //参数2&#xff1a;图片地址//备注说明&#xff1a; //头文件&#xff1a;halconcpp/HOperatorSet.h //命名空间&#xff1a;namespace HalconCpp C#形式 …

perl脚本中使用eval函数执行可能有异常的操作

perl脚本中有时候执行的操作可能会引发异常&#xff0c;为了直观的说明&#xff0c;这里举一个json反序列化的例子&#xff0c;脚本如下&#xff1a; #! /usr/bin/perl use v5.14; use JSON; use Data::Dumper;# 读取json字符串数据 my $json_str join(, <DATA>); # 反…

SpringMVC的文件上传、多文件上传

概念&#xff1a;上传/下载应用 对于上传功能&#xff0c;我们在项目中是经常会用到的&#xff0c;比如用户注册的时候&#xff0c;上传用户头像&#xff0c;这个时候就会使用到上传的功能。而对于下载&#xff0c;使用场景也很常见&#xff0c;比如我们项目中有个使用说明是是…

如何提升数据结构方面的算法能力?

谈及为什么需要花时间学算法&#xff0c;我至少可以列举出三个很好的理由。 (1)性能&#xff1a;选择正确的算法可以显著提升应用程序的速度。仅就搜索来说&#xff0c;用二分查找替 换线性搜索就能为我们帶来巨大的收益。 (2)安全性&#xff1a;如果你选用了错误的算法&…

小小手表探索更多 好玩伴也是好帮手

华为儿童手表 5X 不仅是孩子的好玩伴&#xff0c;也是家长的好帮手。全能形态让小小手表探索更多&#xff0c;高清双摄记录美好&#xff0c;离线定位随时掌握&#xff0c;绿色纯净守护成长&#xff0c;让孩子享受科技带来的安全与乐趣。

vue3.0项目搭建

一、安装vue3脚手架 卸载vue2脚手架 npm uninstall -g vue-cli清除缓存 npm cache clen --force安装最新脚手架 npm install -g vue/cli查看脚手架版本 vue -V 二、构建项目 创建项目 vue create 项目名选择配置 自定义配置&#xff0c;回车 上下键选择Linter / Formatter&a…

【超图】SuperMap iClient3D for WebGL/WebGPU ——暴雪

作者&#xff1a;taco 时隔多年北京又开始降下了特大暴雪。身为打工人的你有没有居家办公呢&#xff1f;反正小编我是没有。既然没有借着暴雪的功劳居家办公&#xff0c;那就接着雪来输出一篇博客好了。基于SuperMap iClient3D for WebGL/WebGPU 实现暴雪仿真效果。 先来看下效…

今日最新版早安问候大全,身体健康,平安幸福!

1&#xff0e;只想用不打扰你的方式轻轻地告诉你&#xff0c;我在惦记你。只希望你看到这个短信的时候&#xff0c;嘴角泛起灿烂的一笑!让身边的人知道你是幸福的&#xff0c;看短信的&#xff0c;我在问候你啊。早安~ 2&#xff0e;晨曦在呼叫&#xff0c;鸟儿在鸣叫&#xff…

【Hive】——DDL(TABLE)

1 查询指定表的元数据信息 如果指定了EXTENDED关键字&#xff0c;则它将以Thrift序列化形式显示表的所有元数据。 如果指定了FORMATTED关键字&#xff0c;则它将以表格格式显示元数据。 describe formatted student&#xff1b;2 删除表 如果已配置垃圾桶且未指定PURGE&…

复杂填报逻辑的支持

复杂填报逻辑的支持 一般填报表应用场景分为两种&#xff1a; 旧数据的维护 现有数据存储中已有一些数据&#xff0c;需要人工在页面对数据进行修改维护。 新数据的采集。 现有数据存储中没有数据&#xff0c;需要人工页面填写录入数据。 简单的数据维护与采集&#xff0…

Mysql 的ROW_NUMBER() 和分区函数的使用 PARTITION BY的使用

Mysql 的ROW_NUMBER() 和分区函数的使用 PARTITION BY的使用 描述: 遇到了一个需求,需要查询用户id和计划id,但是人员id的是重复,我想把人员id去重,支取一个。自然而然的就想到了SELECT DISTINCT prj_plan.last_month_user,prj_plan.id FROM prj_funds_plan prj_plan 但是…

Linux arm架构下构建Electron安装包

上篇文章我们介绍 Electron 基本的运行开发与 windows 安装包构建简单流程&#xff0c;这篇文章我们从零到一构建 Linux arm 架构下安装包&#xff0c;实际上 Linux arm 的构建流程&#xff0c;同样适用于 Linux x86 环境&#xff0c;只不过需要各自的环境依赖&#xff0c;Linu…

java中,用函数对象表示策略

简而言之&#xff0c;函数指针的主要用途就是实现策略(Strategy)模式。 Java没有提供函数指针&#xff0c;但是可以用对象引用实现相同的功能。调用对象上的方法通常是执行该对象上某项操作。 在Java中&#xff0c;使用函数对象&#xff08;Function Object&#xff09;表示策…

Elasitcsearch--解决CPU使用率升高

原文网址&#xff1a;Elasitcsearch--解决CPU使用率升高_IT利刃出鞘的博客-CSDN博客 简介 本文介绍如何解决ES导致的CPU使用率升高的问题。 问题描述 线上环境 Elasticsearch CPU 使用率飙升常见问题如下&#xff1a; Elasticsearch 使用线程池来管理并发操作的 CPU 资源。…

Android--Jetpack--Navigation详解

须知少日拏云志&#xff0c;曾许人间第一流 一&#xff0c;定义 Navigation 翻译成中文就是导航的意思。它是谷歌推出的Jetpack的一员&#xff0c;其目的主要就是来管理页面的切换和导航。 Activity 嵌套多个 Fragment 的 UI 架构模式已经非常普遍&#xff0c;但是对 Fragmen…

关于“Python”的核心知识点整理大全21

9.3.2 Python 2.7 中的继承 在Python 2.7中&#xff0c;继承语法稍有不同&#xff0c;ElectricCar类的定义类似于下面这样&#xff1a; class Car(object):def __init__(self, make, model, year):--snip-- class ElectricCar(Car):def __init__(self, make, model, year):supe…