c++简介
- 面向对象程序设计
C++ 完全支持面向对象的程序设计,包括面向对象开发的四大特性:- 封装
- 抽象
- 继承
- 多态
- 标准库
标准的 C++ 由三个重要部分组成:- 核心语言,提供了所有构件块,包括变量、数据类型和常量,等等。
- C++ 标准库,提供了大量的函数,用于操作文件、字符串等。
- 标准模板库(STL),提供了大量的方法,用于操作数据结构等。
c++基础
基本数据类型
bool
char
int
float
double
void
wchar_t
- 类型修饰符:
short
long
signed
unsigned
- typedef 声明
可以使用typedef
为一个已有的类型取一个新的名字。
常量
- 整型数字
- 浮点数字
- 整数部分和小数部分不可以都没有
- 小数点和指数部分不可以都没有
- 字符
- 字符串
- 布尔值
- #define宏定义
- const
几种基本的变量类型
bool
char
int
float
double
void
wchar_t
- C++ 也允许定义各种其他类型的变量,比如
struct
数据结构、enum
枚举、共用体union
、指针、数组、引用、class
类等等 - C++ 中的变量定义与变量声明
- 变量定义就是告诉编译器在何处创建变量的存储,以及如何创建变量的存储。
- 变量声明向编译器保证变量以给定的类型和名称存在,这样编译器在不需要知道变量完整细节的情况下也能继续进一步的编译。变量声明只在编译时有它的意义,在程序连接时编译器需要实际的变量声明。
- 虽然您可以在 C++ 程序中多次声明一个变量,但变量只能在某个文件、函数或代码块中被定义一次。
- 初始化局部变量和全局变量
当局部变量被定义时,系统不会对其初始化,您必须自行对其初始化。定义全局变量时,系统会自动初始化为下列值:
数据类型 | 默认初始化 |
---|---|
int | 0 |
char | ‘\0’ |
float | 0 |
double | 0 |
pointer | NULL |
变量的存储类型
auto
register
static
extern
mutable
thread_local (C++11)
运算符
- 算术、逻辑、关系、赋值、位
- 其他: 逗号, 取值、取址, 强制转换, sizeof,
->
,.
函数
调用类型 | 描述 |
---|---|
传值调用 | 该方法把参数的实际值复制给函数的形式参数。在这种情况下,修改函数内的形式参数不会影响实际参数。 |
引用调用 | 通过指针传递方式,形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作。 |
引用调用(c没有) | 该方法把参数的引用复制给形式参数。在函数内,该引用用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。 |
// solution1.cpp: 定义控制台应用程序的入口点。
//
# include <stdio.h>
# include <tchar.h>
# include <stdlib.h>
#include <iostream>
using namespace std;
#include "stdafx.h"
// 函数定义
void swap(int &x, int &y)
{
int temp;
temp = x; /* 保存地址 x 的值 */
x = y; /* 把 y 赋值给 x */
y = temp; /* 把 x 赋值给 y */
return;
}
int main()
{
// 局部变量声明
int a = 100;
int b = 200;
cout << "交换前,a 的值:" << a << endl;
cout << "交换前,b 的值:" << b << endl;
swap(a, b);
cout << "交换后,a 的值:" << a << endl;
cout << "交换后,b 的值:" << b << endl;
system("PAUSE");
return 0;
}
- c++参数可以有默认值(c没有)
Lambda
函数与表达式(c没有)
C++ 字符串
C++ 提供了以下两种类型的字符串表示形式:
- C 风格字符串
- C++ 引入的 string 类类型
#include <string>
C++ 引用
引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。
C++ 引用 vs 指针
- 不存在空引用。引用必须连接到一块合法的内存。
- 一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
- 引用必须在创建时被初始化。指针可以在任何时间被初始化。
引用可以做参数或返回值。
#include <iostream>
using namespace std;
double vals[] = {10.1, 12.6, 33.1, 24.1, 50.0};
double& setValues( int i )
{
return vals[i]; // 返回第 i 个元素的引用
}
int main ()
{
cout << "改变前的值" << endl;
for ( int i = 0; i < 5; i++ )
{
cout << "vals[" << i << "] = ";
cout << vals[i] << endl;
}
setValues(1) = 20.23; // 改变第 2 个元素
setValues(3) = 70.8; // 改变第 4 个元素
cout << "改变后的值" << endl;
for ( int i = 0; i < 5; i++ )
{
cout << "vals[" << i << "] = ";
cout << vals[i] << endl;
}
return 0;
}
标准库函数
C++ 标准库可以分为两部分:
- 标准函数库: 这个库是由通用的、独立的、不属于任何类的函数组成的。函数库继承自 C 语言。
- 面向对象类库: 这个库是类及其相关函数的集合。
标准函数库
包含了所有的 C 标准库,为了支持类型安全,做了一定的添加和修改。
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <cmath>
标准函数库分为以下几类:
输入/输出 I/O
字符串和字符处理
数学
时间、日期和本地化
动态分配
其他
宽字符函数
面向对象类库
标准的 C++ 面向对象类库
定义了大量支持一些常见操作的类,比如输入/输出 I/O、字符串处理、数值处理。面向对象类库包含以下内容:
标准的 C++ I/O 类
String 类
数值类
STL 容器类
STL 算法
STL 函数对象
STL 迭代器
STL 分配器
本地化库
异常处理类
杂项支持库
类
成员函数
成员函数可以定义在类定义内部,或者单独使用范围解析运算符 :: 来定义。
class Box
{
public:
double length; // 长度
double breadth; // 宽度
double height; // 高度
double getV(void) {
return length * breadth*height;
}
};
class Box
{
public:
double length; // 长度
double breadth; // 宽度
double height; // 高度
double getV(void);
};
double Box::getV(void) {
return length * breadth*height;
}
C++ 类访问修饰符
public
protected
private
一个类可以有多个public
protected
private
标记区域。每个标记区域在下一个标记区域开始之前或者在遇到类主体结束右括号之前都是有效的。成员和类的默认访问修饰符是 private
。
class Base {
public:
// 公有成员
protected:
// 受保护成员
private:
// 私有成员
};