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

news2024/12/24 2:14:15

目录

一、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可以

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

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

相关文章

uni-app : 监听路由变化

在App.vue中 在 onLaunch中,利用拦截器监听 navigateTo等, 切记要在 invoke回调函数中查看, 要是再 success回调函数中,都路由完成了,还看啥? onLaunch(){ uni.addInterceptor(navigateTo, { //监听跳转invoke(e) {console.log(******** invoke-navigateTo ********, e.url)}…

AI工具集:【stablefoundation】satblediffusion官方免费实验机器人

stablefoundation是satble diffusion官方免费实验机器人,与midjourney一样在discord上操作 视频教程 https://v.douyin.com/ibgQTU7/ 图文教程 1、打开网址: https://stabledigest.substack.com/ 2、点击discord 3、加入stable foundation 4、点击找到机器人频道&#xf…

Linux —— 环境变量

环境变量&#xff08;environment variables&#xff09;&#xff0c;一般指在操作系统中用来指定操作系统运行环境的一些参数&#xff1b;如在编写的C/C代码链接时&#xff0c;所链接的动态、静态库的位置&#xff0c;就是通过相关环境变量帮助编译器进行查找的&#xff1b;环…

Stephen Wolfram:一次只添加一个词

It’s Just Adding One Word at a Time 一次只添加一个词 That ChatGPT can automatically generate something that reads even superficially like human-written text is remarkable, and unexpected. But how does it do it? And why does it work? My purpose here is t…

PID输出反馈回路调控算法原理

本文章学习研究PID闭环回路控制算法&#xff0c;介绍帮助大家理解这个算法&#xff0c;希望看后觉得有用就三连支持一下。 目录 认识PID: PID算法知识理论学习&#xff1a; 首先看PID原理的框图&#xff1a; 一、比例算法P&#xff1a; 二、积分算法I&#xff1a; 三、微…

new Vue () 中的 render 函数与 templete 模板

首先新建一个空的 Vue 项目&#xff0c;我们会在 main.js 文件中发现如下代码 import Vue from vue import App from ./App.vue// 关闭vue的生产提示 Vue.config.productionTip falsenew Vue({render: h > h(App), }).$mount(#app) $mount(#app) &#xff1a;可以参考之前…

Git使用--多人协作

多人协作 多⼈协作git branch -rgit checkout -b dev origin/dev 远程分⽀删除后&#xff0c;本地git branch -a依然能看到的解决办法git remote show origingit remote prune origin 多⼈协作 截止到目前&#xff0c;我们学习了如下Git的相关知识&#xff1a; 基本完成Git的…

Wireshark抓包验证TCP协议的三次握手与四次挥手

TCP的基本知识与Wireshark TCP的一些先知知识可以看下面的文章&#xff0c;了解TCP协议的基本原理&#xff0c;与报文的首部格式。 https://blog.csdn.net/weixin_52308622/article/details/131141490?spm1001.2014.3001.5501 https://blog.csdn.net/weixin_52308622/artic…

30天自制操作系统 day2 换种方式制作磁盘镜像 makefile

制作磁盘镜像工具 用的是它自己写的工具&#xff0c;叫edimg。使用方式如下 edimg imgin:../z_tools/fdimg0at.tek wbinimg src:ipl.bin len:512 from:0 to:0 imgout:helloos.img读取fdimg0at.tek&#xff0c;在读取ipl.bin&#xff0c;从ipl.bin的开头读512个字节到fdim…

《TCP IP网络编程》第八章

第 8 章 域名及网络地址 DNS 是对IP地址和域名进行相互转换的系统&#xff0c;其核心是 DNS 服务器。域名就是我们常常在地址栏里面输入的地址&#xff0c;将比较难记忆的IP地址变成人类容易理解的信息。 计算机内置的默认DNS服务器并不知道网络上所有域名的IP地址信息。若该DN…

第 355 场 LeetCode 周赛

A 按分隔符拆分字符串 简单模拟 class Solution { public:vector<string> splitWordsBySeparator(vector<string> &words, char separator) {vector<string> res;for (auto &s: words) {int n s.size();for (int i 0, j 0; i < n;) {while (j …

C++——String类的增删查改

目录 前言 1.String类的增删查改 1.1增 实验代码&#xff1a; 运行结果&#xff1a; 实验代码&#xff1a; 运行结果:​编辑 1.2删 实验代码&#xff1a; 结果: 1.3查找 练习&#xff1a;查找文件后缀 运行结果&#xff1a; 1.4 改 前言 上篇博客中&#xff0c;我介绍了St…

VisualStudio如何进行插件开发?

文章目录 0.引言1.工具准备2.创建插件项目&#xff08;VSIX&#xff09;3.自定义VSIX属性4.创建一个command命令5.设置command名称6.编写command功能7.调试插件8.安装插件 0.引言 使用Visual Studio插件可以极大地提升开发效率、提供更好的集成环境、丰富扩展生态系统、方便调试…

【团队协作开发】IDEA中Git新建自己的dev工作分支,合并到master主分支教程(极其简单,新手)

文章目录 一、创建新dev工作分支二、push到自己的远程dev工作分支三、工作分支合并到master主分支1、先切换到master主分支2、将远程工作dev分支的内容merge到当前master分支中3、将merge提交到远程master分支 一、创建新dev工作分支 创建完新dev分支以后将默认切换到新dev分支…

K8S 证书过期后,kubeadm 重新生成证书

前言 K8S 各个组件需要与 api-server 进行通信&#xff0c;通信使用的证书都存放在 /etc/kubernetes/pki 路径下&#xff0c;kubeadm 生成的证书默认有效为 1 年&#xff0c;因此需要定时更新证书&#xff0c;否则证书到期会导致整个集群不可用。 本篇文章主要介绍如何通过 k…

openGauss学习笔记-17 openGauss 简单数据管理-表达式

文章目录 openGauss学习笔记-17 openGauss 简单数据管理-表达式17.1 简单表达式17.2 条件表达式17.3 子查询表达式17.4 数组表达式17.5 行表达式 openGauss学习笔记-17 openGauss 简单数据管理-表达式 表达式类似一个公式&#xff0c;我们可以将其应用在查询语句中&#xff0c…

SpringMVC注解介绍(二)

目录 1.RequestPart上传文件 2.获取Cookie 1.使用CookieValue 3.获取Session 3.1SessionAttribute 4.设置Session 4.1HttpSession设置Session 5.获取Header 5.1RequestHeader 6.返回数据 1.返回Json对象 7.请求转发或请求重定向 7.1forward和redirect区别 7.2请求…

element的el-upload实现多个图片上传以及预览与删除

<el-form-itemlabel"实验室照片:"prop"labUrlList"v-if"ruleForm.labHave"><el-upload:action"urlUpload":headers"loadHeader"list-type"picture-card":file-list"ruleForm.labUrlList"class…

LabVIEW在IMAQ图像中手动选择多个ROI

LabVIEW在IMAQ图像中手动选择多个ROI 设计了一个VI&#xff0c;用于在图像上生成和叠加一系列感兴趣区域&#xff08;ROI&#xff09;&#xff0c;并在IMAQ图像控件中显示它们。想挑选其中的一些进行后续处理。可以在控件中手动选择 ROI 吗&#xff1f; 以编程方式生成的 ROI…

MYSQL练习二答案

练习2答案 构建数据库 数据库 数据表 answer开头表为对应题号答案形成的数据表 表结构 表数据 答案&#xff1a; 1、修改emp表中sal字段为salary SQL语句 ALTER TABLE emp change sal salary double结果&#xff1a; 2、查找年薪在20000到30000之间的所有员工信息并按照 工…