首页 > 编程语言 >C++入门(C语言语法改进篇)

C++入门(C语言语法改进篇)

时间:2024-11-09 14:44:37浏览次数:3  
标签:10 入门 int namespace 缺省 C++ C语言 include

目录

C++第一个程序

C++的文件名称后缀为.cpp,C++包含了C语言的大部分语法,所以在.cpp文件里面我们依然可以使用C语言编程。
代码:在.cpp文件里面用C语言编程

// test.cpp
#include<stdio.h>
int main()
{
printf("hello world\n");
return 0;
}

当然C++有⼀套自己的输⼊输出,严格说C++版本的hello world应该是这样写的。
代码:用C++编写打印“Hello World”

#include<iostream>
using namespace std;
int main()
{
cout << "Hello World\n" << endl;
return 0;
}

这里可能会看不懂,因为C++语法和C语言差别还是挺大的。
先来了解一下命名空间:namespace

命名空间

namespace的价值

在编程时我们通常会用到很多的数据变量,当创建数据变量就会遇到给变量命名的阶段,对于很多人来说,这个命名还是很烦的啊,通常不知道该给这个变量命名什么,有时候变量太多就会碰到两个变量的名字重名或这这个名字是一个语法关键字。
C++为了避免这个情况出现,就引出了命名空间。

#include<stdio.h>
#include<stdlib.h>
int rand =10;
int main()
{
printf("%d",rand);
return 0;
}

在这里插入图片描述
如图在C语言里面这个情况是不允许存在的,但是我们在C++里面就可以实现。

#include<stdio.h>
#include<iostream>
namespace ljl
{
int rand =10;
}
int main()
{
cout<<rand<<endl;
return 0;
}

在这里插入图片描述

namespace定义

它的定义与结构体是很类似的:

• 定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接⼀对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。

• namespace本质是定义出⼀个域,这个域跟全局域各自独立,不同的域可以定义同名变量,所以刚刚的rand不在冲突了。
就好像在两个函数里面定义了相同变量的名字一样。

• C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找⼀个变量/函数/类型出处(声明或定义)的逻辑,所以有了域隔离,名字冲突就解决了。
局部域和全局域除了会影响编译查找逻辑,还会影响变量的生命周期,命名空间域和类域不影响变量生命周期。

• namespace只能定义在全局,当然他还可以嵌套定义。
例如:

namespace ljl
{
namespace ljl1
{
int ADD(int x,int y)
{
return x+y;
}
}
}

• 项目工程中多文件中定义的同名namespace会认为是⼀个namespace,不会冲突。

• C++标准库都放在⼀个叫std(standard)的命名空间中。

命名空间的使用

编译器在使用一个变量时会默认在局部变量里查找,找不到再去全局变量去找,但是不会主动到命名空间里面去找,所以我们要使用里面的变量时就需要告诉编译器这个变量在命名空间里。
方法:
• 指定命名空间访问,项目中推荐这种方式。
• using将命名空间中某个成员展开,项目中经常访问的不存在冲突的成员推荐这种方式。
• 展开命名空间中全部成员,项目不推荐,冲突风险很大,日常小练习程序为了方便推荐使用。

代码实例:

#include<iostream>

namespace ljl
{
	int a = 10;
	int b = 20;
}
int main()
{
	printf("%d",ljl:: a);
	return 0;
}

在这里插入图片描述

#include<iostream>

namespace ljl
{
	int a = 10;
	int b = 20;
}

using namespace ljl;
int main()
{
	printf("%d", a);
	return 0;
}

在这里插入图片描述

#include<iostream>

namespace ljl
{
	int a = 10;
	int b = 20;
}

using ljl::b;
int main()
{
	printf("%d", b);
	return 0;
}

在这里插入图片描述

C++输入输出

• 是 Input Output Stream 的缩写,是标准的输⼊、输出流库,定义了标准的输入、输出对象。
• std::cin 是 istream 类的对象,它主要面向窄字符(narrow characters (of type char))的标准输⼊流。
• std::cout 是 ostream 类的对象,它主要面向窄字符的标准输出流。
• std::endl 是⼀个函数,流插入输出时,相当于插入⼀个换行字符加刷新缓冲区。
• <<是流插入运算符,>>是流提取运算符。(C语言还用这两个运算符做位运算左移/右移)
• 使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动指定格式,C++的输入输出可以自动识别变量类型,其实最重要的是C++的流能更好的支持自定义类型对象的输入输出。

#include<iostream>

using namespace std;
int main()
{
	int a = 10;
	float b = 1.1;
	char c = 'x';

	cout << a << " " << b << " " << c << endl;
	std::cout << a << " " << b << " "<<c<<endl;

	cin >> a;
	cin >> b >> c;
	
	printf("%d %f %c", a, b, c);
	return 0;
}

在这里插入图片描述
这里的C++输入输出相对printf来说会有点慢,想要提高输入输出的速度可以选择在程序前面加一段代码:

#include<iostream>
using namespace std;
int main()
{
// 在io需求⽐较⾼的地⽅,如部分⼤量输⼊的竞赛题中,加上以下3⾏代码
// 可以提⾼C++IO效率
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
return 0;
}

缺省参数

• 缺省参数是声明或定义函数时为函数的参数指定⼀个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参,缺省参数分为全缺省和半缺省参数。(有些地方把缺省参数也叫默认参数)
• 全缺省就是全部形参给缺省值,半缺省就是部分形参给缺省值。C++规定半缺省参数必须从右往左依次连续缺省,不能间隔跳跃给缺省值。
• 带缺省参数的函数调用,C++规定必须从左到右依次给实参,不能跳跃给实参。
代码实例:

#include<ioetream>
void func(int a,int b,int c)
{
/...代码实现
}
int main()
{
func(,2,);//错误示范
func(2);//正确示范
return 0;
}

• 函数声明和定义分离时,缺省参数不能在定义中单独出现,规定必须函数声明给缺省值。
代码示例(分别在头文件与.c文件里):
正确示范

int ADD(int x =10,int y =20);
int ADD(int x,int y)
{
}

错误示范

int ADD(int x,int y);
int ADD(int x=10,int y=20)
{
}

全缺省参数

给全部形参传值

#include<iostream>

int ADD(int x = 10, int y = 20)
{
	return x + y;
}
int main()
{
	std::cout << ADD(1, 2) << std::endl;
	return 0;
}

在这里插入图片描述

半缺省参数

两个形参只给一个形参传值。

#include<iostream>

int ADD(int x = 10, int y = 20)
{
	return x + y;
}
int main()
{
	std::cout << ADD(1) << std::endl;
	return 0;
}

在这里插入图片描述

函数重载

C++支持在同⼀作用域中出现同名函数,但是要求这些同名函数的形参不同,可以是参数个数不同或者类型不同。这样C++函数调⽤就表现出了多态行为,使用更灵活。C语⾔是不支持同⼀作用域中出现同名函数的。
代码示例:

参数类型不同

#include<iostream>
using namespace std;
// 1、参数类型不同
int Add(int left, int right)
{
	cout << "int Add(int left, int right)" << endl;
	return left + right;
}
double Add(double left, double right)
{
	cout << "double Add(double left, double right)" << endl;
	return left + right;
}
int main()
{
	Add(10, 20);
	Add(10.1, 20.2);
	return 0;
}

在这里插入图片描述

参数个数不同

#include<iostream>

using namespace std;

void f()
{
	cout << "f()" << endl;
}
void f(int a)
{
	cout << "f(int a)" << endl;
}
// 3、参数类型顺序不同
void f(int a, char b)
{
	cout << "f(int a,char b)" << endl;
}
void f(char b, int a)
{
	cout << "f(char b, int a)" << endl;
}
int main()
{
	f();
	f(10);
	f(10, 'a');
	f('a', 10);
	return 0;
}

在这里插入图片描述


感谢各位观看,有错请在评论区指正,谢谢

标签:10,入门,int,namespace,缺省,C++,C语言,include
From: https://blog.csdn.net/2401_88035751/article/details/143609455

相关文章

  • C++输出奇特的三角形
    题目描述请根据下列规律输出奇特的图形,是一个被*包围了的@三角形n=3**@***@@@*@@@@@输入输入一个整数(3<=n<10)输出输出n行的图形样例输入 3样例输出 **@***@@@*@@@@@#include<iostream>usingnamespacestd;intmain(){ intn,j=1,t=0; cin>>n;......
  • 深入理解JUnit注解:从入门到最佳实践
    深入理解JUnit注解:从入门到最佳实践一、JUnit注解基础概览1.五大核心注解JUnit提供了五个最基本也是最常用的注解:@Test@Before@After@BeforeClass@AfterClass让我们通过一个完整的示例来了解这些注解:publicclassBankAccountTest{privatestaticDatabaseConn......
  • Java JUnit从入门到精通:一篇文章带你掌握单元测试
    JavaJUnit从入门到精通:一篇文章带你掌握单元测试前言在现代软件开发中,单元测试已经成为保证代码质量的重要手段。作为Java生态中最流行的单元测试框架,JUnit提供了强大而灵活的测试功能。本文将从基础开始,逐步深入JUnit的各个方面,帮助你全面掌握Java单元测试。目录JUnit......
  • Java单元测试完全指南:JUnit从入门到精通
    Java单元测试完全指南:JUnit从入门到精通一、前言在现代软件开发中,单元测试已经成为保证代码质量的重要手段。本文将全面介绍Java最流行的单元测试框架JUnit,从基础概念到高级特性,帮助你掌握单元测试的核心技能。二、目录JUnit基础及环境搭建核心注解详解注解最佳实践高级测......
  • 深入计算机语言之C++:模板初阶
     ......
  • c++-有关输出、信息输入、趣味输入应用、运算符、变量、浮点数数据类型的基础知识
    C++是一种功能强大且广泛使用的编程语言,它可以用于开发各种类型的应用程序。在这篇文章中,我们将介绍C++程序的输出、信息输入、趣味输入应用、运算符、变量和浮点数数据类型的基础知识。目录输出信息输入趣味输入应用运算符变量浮点数数据类型题目题目1:解答1:题目2:......
  • c++学习:封装继承多态
    目录封装封装的定义封装的好处封装的实例继承继承的定义继承的好处继承的实例多态多态的定义多态的好处多态的实例封装封装的定义封装是面向对象编程(OOP)中的一个核心概念,它指的是将数据(属性)和操作这些数据的函数(方法)结合在一起的过程,以此来模拟现实世界中的实......
  • 多态(c++)
    一、概念多态分为编译时多态(静态多态)和运行时多态(动态多态),函数重载和函数模板就是编译时多态,它们传不同的类型的参数就可以调用不同的函数,通过参数不同达到多种形态,因为它们实参传给形参的参数匹配是在编译时完成的,所以叫编译时多态运行时多态,在完成某个行为(函数),可以传不同......
  • C语言数据结构之二叉树(BINARY TREE)的多种数据类型存贮
    C语言数据结构之二叉树(BINARYTREE)的多种数据类型存贮用无类型指针(void*)来做为基本数据类型来存贮数据,将其他数据类型强制转化为无类型指针,从而达到目标!!!输出函数指针BTFunc比较函数指针BTCmpFunc返回值为整型值1、-1、0,表示大于、小于、相等代码如下:/*filename:btr......
  • C语言期末必练题目——part 5
    9. #include“stdio.h” func(int b[]) { int j;    for(j=0;j<4;j++)      b[j]=j; } main() { int a[4],i;    func(a);    for(i=0;i<4;i++)       printf(“%2d”,a[i]); }运行结果为:     ......