C++基础入门(一)
一、C++简介
C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机界提出了OOP(object oriented programming:面向对象)思想,支持面向对象的程序设计语言应运而生。
1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++。因此:C++是基于C语言而产生的,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计。
C++祖师爷
二、C++入门
在开始前,先让我们进入最熟悉的操作
熟练用各种语言输出Hello World
由于C++是C的补充,因此常用的变量,与C都是一致的,这里回顾一下常用的变量
类型 | 描述 |
---|---|
int | 整数类型,通常用于存储普通整数,通常占用 4 个字节 |
float | 单精度浮点值,用于存储单精度浮点数。 |
double | 双精度浮点值,用于存储双精度浮点数。 |
bool | 布尔值,用于表达True or False |
一、命名空间
在C/C++的大型项目中,是会有大量的全局变量或者局部变量的命名,如果使用不当,会造成冲突。因此,我们要对标识符的名称进行本地化,以避免命名污染和冲突。
#include<stdio.h>
#include<stdlib.h>
int rand = 10;
int main() {
printf("%d", rand);
return 0;
}
在这段代码中,会报错rand:重定义,以前的定义是函数
rand
是内置的函数,新定义的rand
变量和内置的函数冲突了。
(一)直接创建
namespace N1 {
int rand = 0;
int print = 2;
int sum(int a,int b) {
return a + b;
}
struct MyStruct
{
struct MyStruct* Node;
int next = 0;
};
}
(二)嵌套创建
namespace N1 {
int rand = 0;
int print = 2;
int sum(int a,int b) {
return a + b;
}
struct MyStruct
{
struct MyStruct* Node;
int next = 0;
};
namespace N2 {
int rand = 0;
int print = 2;
int sum(int a, int b) {
return a + b;
}
}
}
食用方法
创建了命名空间就是创建了一个新的作用域,所有内容都局限于这个域,要使用需要三种方法
(一)命名空间名称+作用域限定符
//test.c
#include<iostream>
namespace N1 {
int rand = 0;
int print = 2;
int sum(int a,int b) {
return a + b;
}
}
int main() {
std::cout << N1::print <<std::endl;
std::cout << N1::rand << std::endl;
return 0;
}
这段代码多了几个东西,std
、endl
、::
std
是C/C++标准库的一个命名空间
,里面含有大量的标准函数、类、对象、模版[C++ 标准库 | 菜鸟教程 (runoob.com)]
而cout
就相当于C语言的printf
函数,存在std
这个命名空间里面。::
是作用域限定符,使用cout
就要访问到std
这个域,需要使用::
访问。endl
就相当于换行
(二)using
+namespace
+命名空间名称
using namespace N1;
int main() {
std::cout << print << std::endl;
std::cout << sum(1,2) << std::endl;
return 0;
}
(三)using
+命名空间的成员
using N1::print;
using N1::sum;
int main() {
std::cout << print << std::endl;
std::cout << sum(1,2) << std::endl;
return 0;
}
二、输入/输出
学过的都知道,熟练运用某语言输出Hello World
,那么,该如何优雅的输入输出呢
前面介绍到std
是标准库的一个命名空间,这个空间包括了输入输出的函数
使用cin
标准输入对象(键盘)和cout
标准输出对象(屏幕)必须包含<iostream>
头文件和命名空间std
其中<<
是标准输出流,>>
是标准输入流。这两个函数比printf
和scanf
好用,可以自动识别类型,不需要加占位符%
#include<iostream>
using namespace std;
int main() {
int a = 0;
cin >> a;
cout << "Hello World"<<endl << a << endl;
return 0;
}
建议:在日常使用中,可以直接使用std
,在开发项目过程中,存在大量命名,可以使用限定命名空间名称std::cin/std::cout
三、缺省参数
概念:缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。
int ADD(int a = 1, int b = 2) {
return a + b;
}
int main() {
cout << ADD() << endl; //没有指定实参,使用默认值
cout << ADD(4, 5) << endl;//指定实参
return 0;
类型:
全缺省参数
void Fun(int a = 1, int b = 2,int c=3) {
cout << a << endl;
cout << b << endl;
cout << c << endl;
//全缺省
}
int main() {
Fun();
return 0;
}
半缺省参数
void Fun(int a,int b = 2,int c=3) {
cout << a << endl;
cout << b << endl;
cout << c << endl;
//半缺省
}
int main() {
Fun(10);
return 0;
}
1、缺省参数的值必须要从右往左给
2、缺省参数不能同时出现在函数声明和定义,否则编译器无法识别
//a.cpp void Fun(int a=1) //a.h void Fun(int a=1)