参考:菜鸟教程
#include <iostream>
using namespace std;
int main()
{
cout << "请输入您的名称: "; //标准输出流(cout)
cin >> name; //标准输入流(cin)
cout << "您的名称是: " << name << endl;
return 0;
}
讲解
- C++ 语言定义了一些头文件,这些头文件包含了程序中必需的或有用的信息。上面这段程序中,包含了头文件 <iostream>。
- using namespace std; 告诉编译器使用 std 命名空间。命名空间是 C++ 中一个相对新的概念。
- int main()是主函数,程序从这里开始执行。 cout << “Hello World”; 会在屏幕上显示消息 “Hello World”。
- return 0; 终止 main( )函数,并向调用进程返回值 0。
1、C++ 进一步扩充和完善了 C 语言,是一种面向对象的程序设计语言。C++ 完全支持面向对象的程序设计,包括面向对象开发的四大特性:
- 封装
- 抽象
- 继承
- 多态
2、标准的 C++ 由三个重要部分组成:
- 核心语言,提供了所有构件块,包括变量、数据类型和常量,等等。
- C++ 标准库,提供了大量的函数,用于操作文件、字符串等。
- 标准模板库(STL),提供了大量的方法,用于操作数据结构等。
3、C++ 程序可以定义为对象的集合,这些对象通过调用彼此的方法进行交互。现在让我们简要地看一下什么是类、对象,方法、即时变量。
- 对象 - 对象具有状态和行为。例如:一只狗的状态 - 颜色、名称、品种,行为 - 摇动、叫唤、吃。对象是类的实例。
- 类 - 类可以定义为描述对象行为/状态的模板/蓝图。
- 方法 - 从基本上说,一个方法表示一种行为。一个类可以包含多个方法。可以在方法中写入逻辑、操作数据以及执行所有的动作。
- 即时变量 - 每个对象都有其独特的即时变量。对象的状态是由这些即时变量的值创建的。
4、C++每个语句必须以分号结束。
5、C++ 区分大小写。
6、七种基本数据类型
在 char、int 和 double 数据类型前可以使用一个或多个类型修饰符进行修饰,修饰符用于改变基本类型的含义,所以它更能满足各种情境的需求(各自用于不同类型)。
- signed
- unsigned
- short
- long
C++ 也允许定义各种其他类型的变量,比如枚举、指针、数组、引用、数据结构、类等等,其中枚举类型,是C++一种派生数据类型,使用enum关键字。
7、 C++ 中定义常量的两种方式:
- 使用 #define 预处理器。
- 使用 const 关键字。
#define π 3.14
int main(){
const float π = 3.14;
return 0;
}
8、typedef 为一个已有的类型取一个新的名字,或者使用 typedef 定义一个新类型的语法
typedef int feet; //int的另一个名字
typedef type newname; //定义一个新类型
9、变量作用域是程序的一个区域,一般来说有三个地方:
- 在所有函数外部声明的变量,称为全局变量。
- 在函数或一个代码块内部声明的变量,称为局部变量。
- 在函数参数的定义中声明的变量,称为形式参数(同名优先于全局变量)。
10、C++ 运算符六种
- 算术运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 赋值运算符 (以上基本同C)
- 杂项运算符(略区别于C)
11、C++循环、判断、函数声明和定义、数组定义、指针、结构体基本同C,C++11 提供了对匿名函数的支持,称为 Lambda 函数(也叫 Lambda 表达式)。
11、存储类 ,定义 C++ 程序中变量/函数的范围(可见性)和生命周期。这些说明符放置在它们所修饰的类型之前。下面列出 C++ 程序中可用的存储类:
- auto
- register
- static
- extern
- mutable
- thread_local (C++11)
从 C++ 17 开始,auto 关键字不再是 C++ 存储类说明符,且 register 关键字被弃用。
11、C++ 数学运算,需要引用数学头文件 。
12、C++ 随机数生成器,有两个相关的函数。一个是 rand(),该函数只返回一个伪随机数。生成随机数之前必须先调用 srand() 函数。
13、C++ 引用 vs 指针,它们之间有三个主要的不同:
- 不存在空引用。引用必须连接到一块合法的内存。
- 一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
- 引用必须在创建时被初始化。指针可以在任何时间被初始化。
14、类 class 和对象
类是 C++ 的核心特性,通常被称为用户定义的类型。
对象是根据类来创建的。声明类的对象,就像声明基本类型的变量一样。
#include <iostream>
using namespace std;
class Box
{
public:
double length; // 长度
double breadth; // 宽度
double height; // 高度
};
int main( )
{
Box Box1; // 声明 Box1,类型为 Box
Box Box2; // 声明 Box2,类型为 Box
double volume = 0.0; // 用于存储体积
// box 1 详述
Box1.height = 5.0; //类的对象的公共数据成员可以使用直接成员访问运算符 (.) 来访问
Box1.length = 6.0;
Box1.breadth = 7.0;
// box 2 详述
Box2.height = 10.0;
Box2.length = 12.0;
Box2.breadth = 13.0;
// box 1 的体积
volume = Box1.height * Box1.length * Box1.breadth;
cout << "Box1 的体积:" << volume <<endl;
// box 2 的体积
volume = Box2.height * Box2.length * Box2.breadth;
cout << "Box2 的体积:" << volume <<endl;
return 0;
}
图源网址:C++ 类 & 对象 | 菜鸟教程 https://www.runoob.com/cplusplus/cpp-classes-objects.html
15、C++继承——面向对象程序中的最重要的一个概念,继承允许我们依据另一个类来定义一个类,这样做达到了重用代码功能和提高执行效率的效果。基类 & 派生类
#include <iostream>
using namespace std;
// 基类
class Shape
{
public:
void setWidth(int w)
{
width = w;
}
void setHeight(int h)
{
height = h;
}
protected:
int width;
int height;
};
// 派生类
class Rectangle: public Shape
{
public:
int getArea()
{
return (width * height);
}
};
int main(void)
{
Rectangle Rect;
Rect.setWidth(5);
Rect.setHeight(7);
// 输出对象的面积
cout << "Total area: " << Rect.getArea() << endl;
return 0;
}
多继承:一个子类可以有多个父类,它继承了多个父类的特性。
// 基类 Shape
class Shape {};
// 基类 PaintCost
class PaintCost {};
// 派生类
class Rectangle: public Shape, public PaintCost
{
public:
int getArea()
{
return (width * height);
}
};
访问控制
16、C++ 重载运算符和重载函数
- 重载函数:在同一个作用域内,可以声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同。您不能仅通过返回类型的不同来重载函数。
- 运算符重载:允许重定义或重载大部分 C++ 内置的运算符。这样,您就能使用自定义类型的运算符。
17、C++ 多态:即多种形态。
当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。
#include <iostream>
using namespace std;
class Shape {
protected:
int width, height;
public:
Shape( int a=0, int b=0)
{
width = a;
height = b;
}
virtual int area()
{
cout << "Parent class area :" <<endl;
return 0;
}
};
class Rectangle: public Shape{
public:
Rectangle( int a=0, int b=0):Shape(a, b) { }
int area ()
{
cout << "Rectangle class area :" <<endl;
return (width * height);
}
};
class Triangle: public Shape{
public:
Triangle( int a=0, int b=0):Shape(a, b) { }
int area ()
{
cout << "Triangle class area :" <<endl;
return (width * height / 2);
}
};
// 程序的主函数
int main( )
{
Shape *shape;
Rectangle rec(10,7);
Triangle tri(10,5);
// 存储矩形的地址
shape = &rec;
// 调用矩形的求面积函数 area
shape->area();
// 存储三角形的地址
shape = &tri;
// 调用三角形的求面积函数 area
shape->area();
return 0;
}
17、虚函数
是在基类中使用关键字 virtual 声明的函数。在派生类中重新定义基类中定义的虚函数时,会告诉编译器不要静态链接到该函数。我们想要的是在程序中任意点可以根据所调用的对象类型来选择调用的函数,这种操作被称为动态链接,或后期绑定。
另外有一种纯虚函数。
18、C++ 数据抽象
意为只向外界提供关键信息,并隐藏其后台的实现细节,即只表现必要的信息而不呈现细节。
数据抽象是一种依赖于接口和实现分离的编程(设计)技术。比如我们可以说电视把它的内部实现和外部接口分离开了,您无需知道它的内部实现原理(揽收信号、转换信号等),直接通过它的外部接口(比如电源按钮、遥控器、声量控制器)就可以操控电视。再例如,您的程序可以调用 sort() 函数,而不需要知道函数中排序数据所用到的算法。实际上,函数排序的底层实现会因库的版本不同而有所差异,只要接口不变,函数调用就可以照常工作。
19、C++ 数据封装
意为一种把数据和操作数据的函数绑定在一起的机制,数据抽象是一种仅向用户暴露接口而把具体的实现细节隐藏起来的机制。数据封装引申出了另一个重要的 OOP 概念,即数据隐藏。
20、C++ 接口(抽象类)
接口描述了类的行为和功能,而不需要完成类的特定实现。
C++ 接口是使用抽象类来实现的,抽象类与数据抽象互不混淆,数据抽象是一个把实现细节与相关的数据分离开的概念。
如果类中至少有一个函数被声明为纯虚函数,则这个类就是抽象类。纯虚函数是通过在声明中使用 “= 0” 来指定的