C++学习(1)

一、C++概述(了解)

C++在C语言的基础上添加了面向对象编程和泛型编程的支持

二、helloword程序(掌握)

#define _CET_SECURE_NO_WARNINGS//在开发软件visual studio编译 c文件时, visual studio认为strcpy,scanf等函数不安全的导致报警告和错误,导致无法编译通过。
#include <iostream>//引入头文件
using namespace std;//标准命名空间
int main()
{//C++在C语言的基础上添加了面向对象和泛型编程的支持//cout是标准的输出流对象,打印字符串//endl是刷新缓冲器,并换行cout << "helloword"<<endl;system("pause");//意思就是让程序暂停一下,然后按任意键继续,初学的时候最多见于程序的末尾处,用于看运行结果,避免程序一闪而过。return 0;
}

三、面向对象的三大特性(了解)


    封装 把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏(把函数和变量写在类里面,并给他们权限)
    继承 继承所表达的是类之间相关的关系,这种使得对象可以继承另外一类对象的特征和能力。减少代码和数据冗余
    多态 一个接口,多个方法


四、命名空间


    1.为什么有命名空间:是因为解决多人合作是取标识符是重命名(名称冲突)的问题
    2.什么是命名空间:

#define _CET_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
namespace A {//命名空间,A是空间的名字int a;void func() {}
}
namespace Maker {int a;namespace B{int b;}
}
namespace Maker {//这个Maker和上面的Maker是一个命名空间int c;
}
int main()
{system("pause");return 0;
}

命名空间的注意


1.命名空间只能写在全局
2.命名空间可以嵌套命名空间
3.命名空间是开放,随时可以加入新成员,但是新成员只能在加入后使用
4.匿名的命名空间
5.命名空间可以取别的名字
6.分文件编写代码时,如果.h中有两个命名空间,但是里面的成员函数或者成员变量同名时,在.cpp中实现函数时,需要加上命名空间;

头文件

#pragma once
//.h 和.cpp的区别
// 函数的 .h声明 .cpp实现
//一、用法不同
//1、.h文件直接#include到需要的.cpp文件里,就相当于把.h文件的代码拷贝到.cpp文件
//2、.cpp文件需要先自己生成.o文件,把不同.o文件连接生成可执行文件。
//比如有3个cpp文件:a.cpp、b.cpp、c.cpp,其中一个包含main()函数,需要生成test程序,
//步骤:
//(1)生成3个.o文件:
//	cc - c a.cpp
//	cc - c b.cpp
//	cc - c c.cpp
//	这样就得到3个.o文件:a.o、b.o、c.o
//	(2)链接生成test程序:cc - o test a.o b.o c.o
//	就得到test可执行程序,输入. / test就可执行程序了。
//	二、规范不同
//	1、h文件一般包含类声明;
//	2、cpp文件一般为同名h文件定义所声明的类函数。
//	说明:一般可在cpp文件直接添加main()就可以测试该模块功能。
#include<iostream>
using namespace std;
namespace myMaker1 {//int ma;//定义变量会报错,在.cpp中引入.h相当于将.h中的文件复制过去,所以就存在ma多次定义了,出现变量MM重复的问题;void func();
}
namespace myMaker2 {void func();
}
class test
{
};

源文件

#define _CET_SECURE_NO_WARNINGS
#include <iostream>
#include "03test.h"
using namespace std;
//using 声明可使得指定的标识符可用
void test() {cout << "namespace Maker c" << Maker::c << endl;
}
namespace Maker {int c = 100;namespace B {int b = 200;}
}void test01(){//新名字 旧名字namespace nameMaker = Maker;//在合作项目当中别人的命名空间和你的一样的时候,你可以给自己的命名空间取别名cout << nameMaker::B::b << endl;
}
void test1() {cout << "namespace Maker c" << Maker::c << endl;
}
//类似与static int d=50;只允许该文件使用的变量
namespace {int d=50;
}
int mya = 10;//C语言中局部变量存在栈里,全局变量存静态存储区。
//局部变量在栈空间上分配,这个局部变量所在的函数被多次调用时,每次调用这个局部变量在栈上的位置都不一定相同。局部变量也可以在堆上动态分配,但是记得使用完这个堆空间后要释放之。
//全局变量全部存放在静态存储区,在程序开始执行时给全局变量分配存储区,程序行完毕就释放。在程序执行过程中它们占据固定的存储单元,而不动态地进行分配和释放;
int main()
{int mya = 20;//就近原则cout << "mya=" << mya << endl;//20cout << "::mya" << ::mya << endl;//10cout << "namespace Maker c" << Maker::c << endl;//::作用域运算符 用来访问某个作用域里面的成员cout << Maker::B::b << endl;cout << d << endl;//50//test1();//会报错,因为声明命名空间在函数之后test1();//代码变为可执行程序的四步:预处理 编译 汇编 链接(报错中出现无法解释的外部命令说明链接出现了问题)myMaker1::func();//myMaker1为头文件中的命名空间system("pause");return 0;
}
//两个同名的变量,一个全局变量一个局部变量,那局部变量在前期作用域具有较高的优先权,它能屏蔽全局变量

五、using声明和编译指令(重点)

#define _CET_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;//要使用iostream就要将对应的命名空间引入
namespace A
{int a = 10;int b = 20;int c = 30;
}
void test01() {//using声明是让命名空间中某个标识符可以直接使用,就等于直接把int a = 10;给替换过来,就成为了局部变量using A::a;cout << a<<endl;//int a = 50;//注意:using声明了某个变量,在该作用域不能定义同名的变量
}
void test02()
{//using编译指令,让某个命名空间的标识符都可以直接使用using namespace A;cout << a << endl;cout << b << endl;cout << c << endl;int a = 100;//为什么不会冲突;//类似于命名空间中的a是全局变量,此处的a是局部变量cout << a << endl;
}
int main()
{test01();test02();system("pause");return 0;
}

六、struct类型加强(重点)

加强一  c中定义结构体需要加上struct关键字,C++不需要

加强二  c中结构体中只能定义成员变量,不能定义成员函数。C++既可以定义成员变量也可以定义成员函数

#define _CET_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
//加强一
//这是自定义的数据类型
struct Maker//没有分配空间,因为这只是一个数据类型
{char name[64];int age;
};
void test01() {//int 只是一个数据类型,只写int没有分配空间Maker a;//这时候才进行分配命名空间,不需要加struct就可以定义变量}
//加强二
struct Maker2
{int a;void func() {//结构体内可以写函数cout << "func" << endl;}
};
void test02(){Maker2 a2;a2.func();
}
int main()
{test01();test02();system("pause");return 0;
}

七、更严格的类型转换(了解)

不能隐式转换,必须是显示的转换

#define _CET_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
int main()
{//不能进行隐式转换,只能进行显示转换//char* p = malloc(64);//报错;c中是可以这样写的但是C++数据类型是比较严格的char* p = (char*)malloc(64);//malloc返回的是void *  malloc分配的内存大小至少为参数所指定的字节数system("pause");return 0;
}

八、三目运算符(了解)

C++案例

#define _CET_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
void test()
{int a = 10;int b = 20;(a > b ? a : b) = 100;//C语言的三目运算符返回的是右值//C++的三目运算符返回的是左值是空间cout << "a=" << a << endl;cout << "b=" << b << endl;
}
int main()
{test();system("pause");return 0;
}

C案例

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void test()
{int a = 10;int b = 20;printf("%d\n", a > b ? a : b);//( a > b ? a : b)=100//错误//这个表达式返回的右值是数值,返回的是20//20=100*(a > b ? &a : &b) = 100;printf("b=%d\n", b);
}
int main()
{test();return 0;
}

九、C/C++的const(重点)

const变量为常量,不能直接修改,可以间接修改。

C++案例

C++语言的const修饰的变量有时候有空间,有时候没有空间(发生常量折叠,且没有对变量进行取地址操作)

C++语言中const修饰的全局变量具有内部链接属性,只能在当前文件使用。要使用外部链接的话两侧都加extern即可

#define _CET_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
const int a = 100;//没有内存
void test()
{//发生了常量折叠cout << "a:" << a << endl;//在编译阶段,编译器cout << "a:" << 100 << endl; 速度更快cout << "&a:" << &a << endl;//volatile禁止优化volatile const  int bb = 20;//栈区int* p = (int*)&bb;//进行了取地址操作,所以有空间*p = 2000;cout << "bb:" << bb << endl;//优化的时候为20 编译器直接修改cout << "bb:" << 20 << endl; 编译器的问题  添加volatile后为2000cout << "*p" << *p << endl;//2000cout << "bb的地址" << (int)&bb << endl;cout << "p指向的地址" << (int)p << endl;
}
int main()
{test();system("pause");return 0;
}

C++编译器不能优化数据的情况

1.如果用变量给const修饰的局部变量赋值,那么编译不会优化

2.不能优化自定义数据类型

#define _CET_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
void test() {int a = 10;const int b = a;int *p = (int *)&b;*p = 100;cout << "b=" << b << endl;cout << "*p=" << *p << endl;
}
//自定义数据类型,编译器不能优化
struct Maker{Maker(){//构造函数a = 100;}int a;
};
void test02(){const Maker ma;//实例化对象,并初始化acout << ma.a<<endl;Maker *p = (Maker *)&ma.a;p->a=200;cout<<ma.a<<endl;//没有优化,因为不能优化自定义数据类型
}
int main()
{//test();test02();system("pause");return 0;
}

C案例

全局的const不能直接修改也不能间接修改

局部的const不可以直接修改但是可以间接修改

C语言的const修饰的全局变量具有外部链接(extern)属性

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
const int a = 10;//常量区,一旦初始化,不能修改
int main()
{//C语言的const修饰的变量都有空间不能直接修改全局常量//a = 200;也不能间接修改全局常量//int *p = (int*)&a;//*p = 100;//printf("%d\n",a);const int b = 20;//栈区//b = 200;//不能直接修改局部常量int *p = &b;//可以间接修改局部常量*p = 200;printf("%d\n", b);//使用别的文件的全局const修饰的变量需要声明extern const int c;//C语言的const修饰的全局变量具有外部链接属性printf("%d\n", c);system("pause");//让程序暂停一下return 0;
}

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

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

相关文章

苹果开发者账号注册及证书生成方法详解

转载&#xff1a;注册苹果开发者账号的方法 在2020年以前&#xff0c;注册苹果开发者账号后&#xff0c;就可以生成证书。 但2020年后&#xff0c;因为注册苹果开发者账号需要使用Apple Developer app注册开发者账号&#xff0c;所以需要缴费才能创建ios证书了。 所以新政策…

【送面试题】深入理解Netty与NIO:原理与关键组件解析

AIGC专栏/AI绘画教程/java面试题领取 导言 在现代分布式系统和网络应用开发中&#xff0c;高性能、低延迟的网络通信是至关重要的。Netty作为一个强大的网络框架&#xff0c;广泛应用于构建各种高性能的网络应用。而NIO&#xff08;New I/O&#xff09;则是Java提供的一种非阻…

什么是葡萄酒结构,结构型葡萄酒好吗?

葡萄酒爱好者使用许多复杂的术语来描述葡萄酒的味道&#xff0c;有些是不言自明的&#xff0c;有些则有点模糊。如果你不是葡萄酒专家&#xff0c;你可能很难理解这个葡萄酒术语的全部含义。其中一个术语是葡萄酒结构&#xff0c;那么葡萄酒结构是什么意思呢&#xff1f;而结构…

2023华为杯研究生数学建模D题思路代码分析

完整的分析查看文末名片获取&#xff01; 问题一&#xff1a;区域碳排放量以及经济、人口、能源消费量的现状分析 &#xff08;1&#xff09;建立指标与指标体系 要求1&#xff1a;指标能够描述某区域经济、人口、能源消费量和碳排放量的状况&#xff1b; 要求2&#xff1a…

电路的基本定律——基尔霍夫定律

基尔霍夫定律 &#x1f391;预备知识&#x1f391;基尔霍夫电流定律(KCL)&#x1f383;基尔霍夫电流定律的本质&#xff1a;节点上电荷具有连续性(不会突变)&#x1f383;基尔霍夫电流定律的推广&#xff1a; &#x1f391;基尔霍夫的电压定律(KVL)&#x1f383;基尔霍夫电压定…

中国这么多 Java 开发者,应该诞生出生态级应用开发框架

1、必须要有&#xff0c;不然就永远不会有 应用开发框架&#xff0c;虽然没有芯片、操作系统、数据库、编程语言这些重要。但是最终呈现在用户面前的&#xff0c;总是有软件部分。而软件系统开发&#xff0c;一般都需要应用开发框架&#xff0c;它是软件系统的基础性部件之一。…

在Windos 10专业版搭建Fyne(Go 跨平台GUI)开发环境

目录 在Windos 10专业版搭建Fyne&#xff08;Go 跨平台GUI&#xff09;开发环境一 Fyne 和 MSYS2简介1.1 Fyne1.2 MSYS2 二 安装 MSYS22.1 下载MSYS22.2 安装2.3 环境变量设置2.4 检测安装环境 三 参考文档 在Windos 10专业版搭建Fyne&#xff08;Go 跨平台GUI&#xff09;开发…

java内存分页工具类

hutool 依赖&#xff1a; <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.5.7</version></dependency>代码如下&#xff1a; import cn.hutool.core.util.PageUtil; import lombok…

Greenplum实用工具-gpfdist

注&#xff1a;本文翻译自https://docs.vmware.com/en/VMware-Greenplum/7/greenplum-database/utility_guide-ref-gpfdist.html 向Greenplum数据库段提供数据文件或从数据库段写入数据文件。 语法 gpfdist [-d <directory>] [-p <http_port>] [-P <last_http…

zabbix学习2--zabbix6.x高可用

文章目录 1. server高可用-默认HA2. 访问高可用 1. server高可用-默认HA 1.部署zabbix单节点后&#xff0c;配置添加HANodeName和NodeAddress即为HA架构 2.zabbix1故障后切换zabbix2使用 3.浏览器访问主机1&#xff0c;使用主机1php前端连接mysql后zabbix2提供后台服务--------…

算法-单词搜索 II

算法-单词搜索 II 1 题目概述 1.1 题目出处 https://leetcode.cn/problems/word-search-ii/description/?envTypestudy-plan-v2&envIdtop-interview-150 1.2 题目描述 2 DFS 2.1 解题思路 每个格子往上下左右四个方向DFS&#xff0c;拼接后的单词如果在答案集中&…

API接口大全:常用、热门、免费的都有

常用、热门、免费的第三方接口应有尽有… 二次号查询&#xff1a;通过手机号查询是否二次入网&#xff0c;直连三大运营商&#xff0c;精准查询。反欺诈&#xff08;羊毛盾&#xff09;&#xff1a;反机器欺诈&#xff0c;检测异常IP、异常手机号。IP应用场景-IPv4&#xff0c…

基于TCP的简易电子词典

头文件&#xff1a; #ifndef __HEAD_H__ #define __HEAD_H__#include <myhead.h>#define N 32 typedef struct {int type;char name[N];char data[256];int option;int flag; }MSG;#define R 1 // 用户注册 #define L 2 // 用户登录 #define Q 3 // 查询…

【若依框架2】前后端分离版本添加功能页

在VSCode的src/views下新建个文件平example,在example下创建test文件夹&#xff0c;在test里创建index.vue文件 <template> <h1>Hello world</h1> </template><script> export default {name: "index" } </script><style s…

2023/9/20总结

maven maven本质是 一个项目管理工具 将项目开发 和 管理过程 抽象成 一个项目对象模型&#xff08;POM&#xff09; POM &#xff08;Project Object Model&#xff09; 项目对象模型 作用 项目构建 提供标准的自动化 项目构建 方式依赖管理 方便快捷的管理项目依赖的资源…

C++【个人笔记1】

1.C的初识 1.1 简单入门 #include<iostream> using namespace std; int main() {cout << "hello world" << endl;return 0; } #include<iostream>; 预编译指令&#xff0c;引入头文件iostream.using namespace std; 使用标准命名空间cout …

springboot整合返回数据统一封装

1、MagCode&#xff0c;错误码枚举类 package com.mgx.common.enums;import lombok.*; import lombok.extern.slf4j.Slf4j;/*** 错误码* author mgx*/ Slf4j NoArgsConstructor AllArgsConstructor public enum MsgCode {/*** 枚举标识&#xff0c;根据业务类型进行添加*/Code…

轻量云服务器租用好在哪

从技术上讲&#xff0c;轻量级云服务器是特化了某一配置的高性价比云服务器的结合。下面&#xff0c;我们将了解轻量级云服务器有什么优 势&#xff0c; 使用物理服务器搭建网站&#xff0c;您需要租用整个服务器&#xff0c;这成本会变得非常昂贵。这对于一些比较简单的使用需…

PostgreSQL 数据库实现公网远程连接

文章目录 前言1. 安装postgreSQL2. 本地连接postgreSQL3. Windows 安装 cpolar4. 配置postgreSQL公网地址5. 公网postgreSQL访问6. 固定连接公网地址7. postgreSQL固定地址连接测试 前言 PostgreSQL是一个功能非常强大的关系型数据库管理系统&#xff08;RDBMS&#xff09;,下…

建议收藏《Verilog代码规范笔记_华为》(附下载)

华为verilog编程规范是坊间流传出来华为内部的资料&#xff0c;其贴合实际工作需要&#xff0c;是非常宝贵的资料&#xff0c;希望大家善存。至于其介绍&#xff0c;在此不再赘述&#xff0c;大家可看下图详细了解&#xff0c;感兴趣的可私信领取《Verilog代码规范笔记_华为》。…