C++面向对象程序设计-基础入门(超详细)

目录

一、c++概述

二、初识c++

1、第一个c++程序

 2、c++面向对象的三大特性(重要)

三、作用域运算符::

1、使用关键字namespace创建一个命名空间

2、命名空间只能定义在全局

3、 命名空间嵌套

 4、随时将新的成员加入命名空间

5、命名空间中 函数的声明和实现分开 

 6、无名命名空间

 7、命名空间取别名

8、使用using申明命名空间中的某几个成员可用 

出现的问题1: 重复定义

遇到函数重载(函数名相同,形参不同):

9、using声明整个命名空间

 五、类型增强

1、全局变量检测增强

2、c++的函数形参必须有类型

3、c++中函数如果没有参数,必须写void

4、更严格的类型转换

5、结构体类型增强(重要)

 6、c++新增bool类型

7、 三目运算符增

六、c++中的const


一、c++概述

       C++是对C的扩展,任何有效的c程序都是有效的c++程序,c++程序可以使用已有的c程序库。
C++语言在c语言的基础上添加了面向对象编程和泛型编程的支持。c++融合了3种不同的编程方式:c语言代表的过程性语言.c++在c语言基础上添加的类代表的面向对象语言.c++模板支持的泛型编程。我们常常将这两门语言统称为“C/C++”。

c编程思想:面向过程

c++编程思想:面向对象泛型编程

面向过程(c): 通过分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步 实现,并调用。

面向对象(c++):面向对象编程,简称oop技术。算法与数据结构被看做是一个整体(对象),程序=对象+对象+对象 +对象        

c++标准:c++98、c++11

二、初识c++

1、第一个c++程序

        #include:预编译指令.引入头文件iostream。 using namespace std:使用标准命名空间,命名空间用关键字namespace来定义。命名空间是.C++的一种机制..用来把单个标识符下的大量有逻辑联系的程序实体组合到一起。此标识符作为此组群的名字。 cout<<"hello world"< endl;和printf 功能一样,输出字符串"hello world“。

      扩展:c++头文件没有扩展名。但是有些c语言的头文件被转换为c++的头文件,这些文件被重新命名丢掉了扩展名.h[使之成为c++风格头文件),并在文件名称前面加上前缀c(表明来自c语言)。例如c++版本的math,h.为 cmath。 

 2、c++面向对象的三大特性(重要)

  • 封装:将相同属性的数据和方法封装在一起,加权限区分,用户只能借助公共方法操作私有数据。
  • 继承:体现在类和类之间的关系,如果A类继承于B类,那么A类直接拥有B类的数据和方法
  • 多态:一个接口(函数),多种功能

三、作用域运算符::

        ::解决局部变量与全局变量的重名问题四、命名空间 

        创建名字是程序设计过程中一项最基本的活动,当一个项目很大时,它会不可避免地包含大量名称,名称(name)可以是符号常量、变量、函数、结构、枚举、类和对象等等。c++允许我们对名字的产生和名字的可见性进行控制。我们之前在学习c语言可以通过static关键字来使得名字只得在本编译单元内可见,在c++中我们将通过一种通过命名空间控制对名称的作用域。命名空间的本质:对符号常量、变量、函数、结构、枚举、类和对象等等进行封装。

1、使用关键字namespace创建一个命名空间

2、命名空间只能定义在全局

3、 命名空间嵌套

 4、随时将新的成员加入命名空间

5、命名空间中 函数的声明和实现分开 

 6、无名命名空间

无命名空间中的标识符只能在本文件内访问,相当于给这个标识符加上了static

 7、命名空间取别名

8、使用using申明命名空间中的某几个成员可用 

出现的问题1: 重复定义

 若using A::num放在外部,作为全局变量,就不会重复定义。

遇到函数重载(函数名相同,形参不同):

namespace A {
	void fun()
	{
		cout << "A中fun void" << endl;
	}
	void fun(int a)
	{
		cout << "A中fun  int" << endl;
	}
	void fun(int a,int b)
	{
		cout << "A中fun int int" << endl;
	}
}
void test()
{	
	//函数重载,命名空间中所有同名函数都被声明可用
	using A::fun();
	fun();
	fun(10);
	fun(10, 10);
}

9、using声明整个命名空间

加作用域解决冲突:

 五、类型增强

1、全局变量检测增强

int a;//没有赋值,当作声明

int a=10;//赋值,当作定义

此代码在c++中编译失败,在c下编译通过。

2、c++的函数形参必须有类型

c语言:允许函数形参无类型(可以传任意参数),c++不允许。

 //i没有写类型,可以是任意类型
int fun1(i)
{
printf("%d\n", i);
return 0;
}
//i没有写类型,可以是任意类型
int fun2(i)
{
printf("%s\n", i);
return 0;
 }

此代码在c++中编译失败,在c下编译通过。

3、c++中函数如果没有参数,必须写void

        在C语言中,int fun()表示返回值为int,接受任意参数的函数,int fun(void)表示返回值为int的无参函数在C++中..int fun(和 int fun(void)具有相同的意义.都表示返回值为int的无参函数

/没有写参数,代表可以传任何类型的实参
int fun()
{
    printf("fun函数\n");
    return 0;
}
int main(int argc, char *argv[])
  {
    fun(10);
    fun(10, 20);
    fun("hello");
    return 0;
  }

此代码在c++中编译失败,在c下编译通过,若加上void,c编译也不通过。故无参数建议写void。 

4、更严格的类型转换

c语言中枚举变量(底层是数字)允许赋其他int类型的值,c++不允许

5、结构体类型增强(重要)

 6、c++新增bool类型

        标准c++的 bool类型有两种内建的常量true(转换为整数1)和 false(转换为整数0)表示状态。这三个名字都是关键字。bool类型只有两个值,true(1 值),false(0值) bool类型占1个字节大小给bool类型赋值时,非0值会自动转换为true(1),0值会自动转换false(0)

7、 三目运算符增

六、c++中的const

1、c++和c中的const都是修饰变量为 只读。

2、c语言 严格遵循 const修饰的是只读变量,但可以通过指针修改其值。

 3、c++的const 会对变量 优化,不可以通过指针修改其值。

        如果以常量初始化const修饰的变量 编译器会将变量的值 放入符号常量表中,不会立即给变 量开辟空间,只有当对a 取地址时 编译器才会给a开辟空间(只读变量)

通过指针变量p 访问空间内容*p取的是空间的值。通过变量名a 访问的是符号常量表中的值 。

 4、如果以变量初始化const修饰的只读变量,没有符号常量表,立即开辟空间,可以通过指针修改其值。

 5、如果以const修饰的是自定义类型的变量 也不会有符号常量表,立即开辟空间,可以通过指针修改其值。

 6、c++中尽量使用const代替define

//#define A 10
const int A=10;
  • const有类型,可进行编译器类型安全检查。#define无类型,不方便进行类型检查
  • const有作用域,而#define不重视作用域,宏不能作为命名空间、结构体、类的成员,而const可以

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

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

相关文章

DXFReader.NET 2023 Crack

DXFReader.NET 是一个 .NET 组件&#xff0c;允许直接从 AutoCAD 图形文件格式 DXF&#xff08;也称为图形交换格式&#xff09;查看、操作和打印。 DXFReader.NET 之 DXF 是 Drawing eXchange Format 的首字母缩写。DXF 是图形文件内容的复制&#xff0c;支持将文件从一个 CA…

picgo Request failed with status code 404

今天写picgo的时候&#xff0c;出现了一个错误&#xff0c;如何解决&#xff1a; 这里是repo的配置出现了问题&#xff0c;不过我的是因为粗心&#xff0c;把master写成了mater&#xff0c;emmmm 这里的repo要跟仓库的地址相同就是这一块&#xff1a;把这一块填到repo就行 然…

算法之图论

定义 图通常以一个二元组 G<V, E>表示&#xff0c;V表示节点集&#xff0c;E表示边集。节点集中元素的个数&#xff0c;称为图的阶。 若图G中的每条边都是没有方向的&#xff0c;称为无向图&#xff1b;每条边是由两个节点组成的无序对&#xff0c;例如节点V1和节点V2之…

论文阅读:矩阵乘法GEMM的cache优化,子矩阵的切分方法Anatomy of High-Performance MatrixMultiplication

矩阵乘法优化的知名论文goto paper&#xff1a; 矩阵乘法的优化需要将矩阵切分成子矩阵&#xff0c;用子矩阵相乘的结果组合为原矩阵相乘的结果&#xff1a; 上图是拆分矩阵的方法&#xff0c;M表示矩阵&#xff0c;X方向和Y方向的两个维度都是未知的。P表示横条或竖条&#x…

前端监控一vue指令实现埋点

前端监控一vue指令实现埋点 https://v2.vuejs.org/v2/guide/custom-directive.html 自定义指令 需要在main.js中执行 import Vue from vue // 自定义埋点指令 Vue.directive(track, {//钩子函数&#xff0c;只调用一次&#xff0c;指令第一次绑定到元素时调用。在这里可以…

Linux 下 nc 发送接收 udp、tcp数据

nc&#xff0c;全名叫 netcat&#xff0c;它可以用来完成很多的网络功能&#xff0c;譬如端口扫描、建立TCP/UDP连接&#xff0c;数据传输、网络调试等等&#xff0c;因此&#xff0c;它也常被称为网络工具的 瑞士军刀 。 一、只服务端使用nc 备注&#xff1a;这种方式只能发…

新能源汽车交流充电桩CP信号详解

随着新能源汽车的推广&#xff0c;交流充电桩迎来了巨大的市场需求&#xff0c;人们对车辆充电的便利性、安全性有着越来越高的要求。CP信号主要用于交流充电桩&#xff0c;充电桩和汽车之间只能通过CP信号进行通讯&#xff0c;判断、控制充电电流和状态。 汽车充电桩CP信号…

124.【SpringBoot 源码刨析C】

SpringBoot源码刨析C (三)、SpringBoot核心功能2.Web4.数据响应与内容协商(1).响应JSON&#xff08;1.1&#xff09;jackson.jarResponseBody&#xff08;1.1.1&#xff09;、返回值解析器&#xff08;1.1.2&#xff09;、返回值解析器原理 (1.2).SpringMVC到底支持哪些返回值(…

【STL】模拟实现简易 list

目录 1. 读源码 2. 框架搭建 3. list 的迭代器 4. list 的拷贝构造与赋值重载 拷贝构造 赋值重载 5. list 的常见重要接口实现 operator--() insert 接口 erase 接口 push_back 接口 push_front 接口 pop_back 接口 pop_front 接口 size 接口 clear 接口 别…

Window环境RabbitMq搭建部署

Erlang下载安装及配置环境变量 下载erlang&#xff0c;原因在于RabbitMQ服务端代码是使用并发式语言Erlang编写的 Erlang下载 Erlang官网下载&#xff1a; http://www.erlang.org/downloads Erlang国内镜像下载&#xff08;推荐&#xff09;&#xff1a; http://erlang.org/d…

旧版Xcode文件较大导致下载总是失败但又不能断点续传重新开始的解决方法

问题&#xff1a; 旧版mac下载旧版Xcode时需要进入https://developer.apple.com/download/all/?qxcode下载&#xff0c;但是下载这些文件需要登录。登录后下载中途很容易失败&#xff0c;失败后又必须重新下载。 解决方案&#xff1a; 下载这里面的内容都需要登录&#xff0…

Appium+python自动化(十九)- Monkey(猴子)参数(超详解)

前边几篇介绍了Monkey以及Monkey的事件&#xff0c;今天就给小伙伴们介绍和分享一下Monkey的参数。 首先我们看一下这幅图来大致了解一下&#xff1a; 1、Monkey 命令 基本参数介绍 -p <允许的包名列表> 用此参数指定一个或多个包。指定包之后&#xff0c;mon…

用html+javascript打造公文一键排版系统7:落款排版

一、公文落款的格式 公文落款包括单位署名和成文日期两个部分&#xff0c;其中成文日期中的数字 用阿拉伯数字将年、月、日标全&#xff0c;年份应标全称&#xff0c;月、日不编虚位&#xff08;即 1 不编为 01&#xff09;。 在实际应用工作中分为三种情况&#xff1a; &am…

【Selenium+Pytest+allure报告生成自动化测试框架】附带项目源码和项目部署文档

目录 前言 【文章末尾给大家留下了大量的福利】 测试框架简介 首先管理时间 添加配置文件 conf.py config.ini 读取配置文件 记录操作日志 简单理解POM模型 简单学习元素定位 管理页面元素 封装Selenium基类 创建页面对象 简单了解Pytest pytest.ini 编写测试…

保护数字世界的壁垒

随着科技的不断发展和互联网的普及&#xff0c;我们的生活日益依赖于数字化的世界。然而&#xff0c;随之而来的是网络安全威胁的不断增加。网络攻击、数据泄露和身份盗窃等问题已经成为我们所面临的现实。因此&#xff0c;网络安全变得尤为重要&#xff0c;我们需要采取措施来…

什么是分布式操作系统?我们为什么需要分布式操作系统?

分布式操作系统是一种特殊的操作系统&#xff0c;本质上属于多机操作系统&#xff0c;是传统单机操作系统的发展和延伸。它是将一个计算机系统划分为多个独立的计算单元(或者也可称为节点)&#xff0c;这些节点被部署到每台计算机上&#xff0c;然后被网络连接起来&#xff0c;…

Win10环境下Android Studio中运行Flutter HelloWorld项目

一、引言 Android Studio是Android的官方IDE(Integrated Development Environment)。它专为Android而打造&#xff0c;可以加快开发速度&#xff0c;为Android设备构建最高品质的应用。 Flutter是Google推出并开源的移动应用开发框架&#xff0c;主打跨平台、高保真、高性能。开…

【STL】list用法试做_底层实现

目录 一&#xff0c;list 使用 1. list 文档介绍 2. 常见接口 1. list中的sort 2. list sort 与 vector sort效率对比 3. 关于迭代器失效 4. clear 二&#xff0c;list 实现 1.框架搭建 2. 迭代器类——核心框架 3. operator-> 实现 4. const——迭代…

【计算机网络 01】说在前面 信息服务 因特网 ISP RFC技术文档 边缘与核心 交换方式 定义与分类 网络性能指标 计算机网络体系结构 章节小结

第一章--概述 说在前面1.1 计算机网络 信息时代作用1.2 因特网概述1.3 三种交换方式1.4 计算机网络 定义与分类1.5 计算机网络的性能指标1.6 计算机网络体系结构1 常见的计算机网络体系结构2 计算机网络体系结构分层的必要性3 计算机网络体系结构分层思想举例4 计算机网络体系结…

RuntimeError: DataLoader worker (pid 2105929) is killed by signal: Killed.

PyTorch DataLoader num_workers Test - 加快速度 可以利用PyTorch DataLoader类的多进程功能来加快神经网络训练过程。 加快训练进程 为了加快训练过程&#xff0c;我们将利用DataLoader类的num_workers可选属性。 num_workers属性告诉DataLoader实例要使用多少个子进程进…