1、打印hello world
#include <iostream>
using namespace std;
int main()
{
cout << "Hello World!\n";
}
2、面对对象程序设计
-
封装(Encapsulation):封装是将数据和方法组合在一起,对外部隐藏实现细节,只公开对外提供的接口。这样可以提高安全性、可靠性和灵活性。
-
继承(Inheritance):继承是从已有类中派生出新类,新类具有已有类的属性和方法,并且可以扩展或修改这些属性和方法。这样可以提高代码的复用性和可扩展性。
-
多态(Polymorphism):多态是指同一种操作作用于不同的对象,可以有不同的解释和实现。它可以通过接口或继承实现,可以提高代码的灵活性和可读性。
-
抽象(Abstraction):抽象是从具体的实例中提取共同的特征,形成抽象类或接口,以便于代码的复用和扩展。抽象类和接口可以让程序员专注于高层次的设计和业务逻辑,而不必关注底层的实现细节。
3、基本语法
C++ 程序可以定义为对象的集合,这些对象通过调用彼此的方法进行交互。现在让我们简要地看一下什么是类、对象,方法、即时变量。
- 对象 - 对象具有状态和行为。例如:一只狗的状态 - 颜色、名称、品种,行为 - 摇动、叫唤、吃。对象是类的实例。
- 类 - 类可以定义为描述对象行为/状态的模板/蓝图。
- 方法 - 从基本上说,一个方法表示一种行为。一个类可以包含多个方法。可以在方法中写入逻辑、操作数据以及执行所有的动作。
- 即时变量 - 每个对象都有其独特的即时变量。对象的状态是由这些即时变量的值创建的。
4、基本数据类型
基本的内置类型
C++ 为程序员提供了种类丰富的内置数据类型和用户自定义的数据类型。下表列出了七种基本的 C++ 数据类型:
| 类型 | 关键字 |
|---|---|
| 布尔型 | bool |
| 字符型 | char |
| 整型 | int |
| 浮点型 | float |
| 双浮点型 | double |
| 无类型 | void |
| 宽字符型 |
wchar_t |
其实 wchar_t 是这样来的:
typedef short int wchar_t;
所以 wchar_t 实际上的空间是和 short int 一样。
5、C++ 中的左值(Lvalues)和右值(Rvalues)
C++ 中有两种类型的表达式:
- 左值(lvalue):指向内存位置的表达式被称为左值(lvalue)表达式。左值可以出现在赋值号的左边或右边。
- 右值(rvalue):术语右值(rvalue)指的是存储在内存中某些地址的数值。右值是不能对其进行赋值的表达式,也就是说,右值可以出现在赋值号的右边,但不能出现在赋值号的左边。
变量是左值,因此可以出现在赋值号的左边。数值型的字面值是右值,因此不能被赋值,不能出现在赋值号的左边。
6、C++ 中的类型限定符
类型限定符提供了变量的额外信息,用于在定义变量或函数时改变它们的默认行为的关键字。
| 限定符 | 含义 |
|---|---|
| const | const 定义常量,表示该变量的值不能被修改。 |
| volatile | 修饰符 volatile 告诉该变量的值可能会被程序以外的因素改变,如硬件或其他线程。。 |
| restrict | 由 restrict 修饰的指针是唯一一种访问它所指向的对象的方式。只有 C99 增加了新的类型限定符 restrict。 |
| mutable | 表示类中的成员变量可以在 const 成员函数中被修改。 |
| static | 用于定义静态变量,表示该变量的作用域仅限于当前文件或当前函数内,不会被其他文件或函数访问。 |
| register | 用于定义寄存器变量,表示该变量被频繁使用,可以存储在CPU的寄存器中,以提高程序的运行效率。 |
7、字符串
| 序号 | 函数 & 目的 |
|---|---|
| 1 | strcpy(s1, s2); 复制字符串 s2 到字符串 s1。 |
| 2 | strcat(s1, s2); 连接字符串 s2 到字符串 s1 的末尾。连接字符串也可以用 + 号,例如: string str1 = "runoob"; string str2 = "google"; string str = str1 + str2; |
| 3 | strlen(s1); 返回字符串 s1 的长度。 |
| 4 | strcmp(s1, s2); 如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回值小于 0;如果 s1>s2 则返回值大于 0。 |
| 5 | strchr(s1, ch); 返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。 |
| 6 | strstr(s1, s2); 返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。 |
8、指针
1、空指针
NULL 指针是一个定义在标准库中的值为零的常量
#include <iostream>
using namespace std;
int main()
{
int* ptr = NULL;
cout << "ptr-value:" << ptr << endl;
}
2、指针算数运算
数组从头打印
#include <iostream>
#define MAX 3
using namespace std;
int main()
{
int var[MAX] = { 10,100,200 };
int* ptr;
//指针指向数组
ptr = var;
cout << "ptr-value:" << *ptr << endl;//10
for (int i = 0; i < MAX; i++)
{
//获取指针的值
cout << "address of var : " << i << endl;
cout << ptr << endl;
//获取指针指向的值
cout << "value of var : " << i << endl;
cout << *ptr << endl;
ptr++;
}
}
指针指向最后,从最后开始打印
#include <iostream>
#define MAX 3
using namespace std;
int main()
{
int var[MAX] = { 10,100,200 };
int* ptr;
//指针指向数组最后
ptr = &var[MAX-1];
for (int i = MAX; i > 0; i--)
{
cout << "address of var[" << i << "] = ";
cout << ptr << endl;
cout << "value of var=" << *ptr << endl;
ptr--;
}
}
address of var[3] = 0000001206DDF550
value of var=200
address of var[2] = 0000001206DDF54C
value of var=100
address of var[1] = 0000001206DDF548
value of var=10
指针比较
#include <iostream>
#define MAX 3
using namespace std;
int main()
{
int var[MAX] = { 10,100,200 };
int* ptr;
//指针指向数组开头
ptr = var;
int i = 0;
//指针比较
for (i = 0;ptr<=&var[MAX-1];i++)
{
cout << "address of var[" << i << "] = ";
cout << ptr << endl;
cout << "value of var=" << *ptr << endl;
ptr++;
}
}
9、引用
引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。
一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。
C++ 引用 vs 指针
引用很容易与指针混淆,它们之间有三个主要的不同:
- 不存在空引用。引用必须连接到一块合法的内存。
- 一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
- 引用必须在创建时被初始化。指针可以在任何时间被初始化。
1、定义一个引用变量,修改原来变量的话,引用变量就是原来变量取别名
修改原来变量,就是修改引用变量,
修改引用变量,就是修改原来变量,他们共用一段内存,没有单独开辟内存。
2、引用初始化后,不可以改变其指向,一个变量可以有多个引用
#include <iostream>
#define MAX 3
using namespace std;
int main()
{
int num = 10;
int& value = num;
cout << "num-value:" << num << endl;
cout << "value-value:" << value << endl;
cout << "num-add:" << &num << endl;
cout << "value-add:" << &value << endl;
cout << "1、修改num的值" << endl;
//1、修改num的值
num = 20;
cout << "num-value:" << num << endl;
cout << "value-value:" << value << endl;
cout << "num-add:" << &num << endl;
cout << "value-add:" << &value << endl;
//2、修改value的值
value = 40;
cout << "num-value:" << num << endl;
cout << "value-value:" << value << endl;
cout << "num-add:" << &num << endl;
cout << "value-add:" << &value << endl;
int num_two = 90;
value = num_two;
cout << "num-value:" << num << endl;
cout << "value-value:" << value << endl;
cout << "num-add:" << &num << endl;
cout << "value-add:" << &value << endl;
}
num-value:10
value-value:10
num-add:00000076006FFB54
value-add:00000076006FFB54
1、修改num的值
num-value:20
value-value:20
num-add:00000076006FFB54
value-add:00000076006FFB54
num-value:40
value-value:40
num-add:00000076006FFB54
value-add:00000076006FFB54
num-value:90
value-value:90
num-add:00000076006FFB54
value-add:00000076006FFB54
3、引用传参
using namespace std;
void swap(int& x, int& y);
int main()
{
int num = 10;
int numb = 20;
swap(num, numb);
cout << num << endl;
cout << numb << endl;
}
void swap(int& x, int& y)//普通(int x,int y)只会改变局部变量里面的值,使用引用之后,引用的值交换了,原来的值就交换了
{
int temp;
temp = x;//交换了x,y的值
x = y;
y = temp;
}
20
10
4、把引用作为返回值
#include <iostream>
#define MAX 3
using namespace std;
double vals[] = { 10,20,30,40,50 };
double& setvalue(int i) {
//返回第i个元素的引用,ref是一个引用变量,ref引用vals[i]
double& ref = vals[i];
return ref;
}
int main()
{
for (int i = 0; i < 5; i++) {
cout << "vals=" << vals[i] << endl;
}
setvalue(1) = 22;
setvalue(3) = 44;
for (int i = 0; i < 5; i++) {
cout << "vals=" << vals[i] << endl;
}
}
10、基本输入输出
#include <iostream>
using namespace std;
int main()
{
char str[] = "hello C++";
char name[50];
cout << str << endl;
cout << "请输入你的名称:" << endl;
cin >> name;//读到空格就结束了,比如输入jack son,输出jack
cout << "your name:" << name << endl;
}
hello C++
请输入你的名称:
jack son
your name:jack
E:\C\visualStudio\bilibili\C++\class1\x64\Debug\class1.exe (进程 10156)已退出,代码为 0。
按任意键关闭此窗口. . .
10、数据结构
C/C++ 数组允许定义可存储相同类型数据项的变量,但是结构是 C++ 中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项。
结构在我看来,类似于C语言的结构体
定义一个结构的规范
struct Student{
int id;
char sex[5];
char name[10];
char subject[10];
};
访问结构成员,使用.访问
如何赋值,对于字符串使用strcpy函数
struct Student{
int id;
char sex[5];
char name[10];
char subject[10];
};
int main()
{
Student jack;
Student tom;
//数值类直接用.赋值,字符串数组类用字符串函数赋值
jack.id=1;
strcpy(jack.sex,"man");
strcpy(jack.name,"jack son");
strcpy(jack.subject,"english");
cout << "ID=" << jack.id << endl;
cout << "sex=" << jack.sex << endl;
cout << "name=" << jack.name<< endl;
cout << "subject=" << jack.subject << endl;
}
ID=1
sex=man
name=jack son
subject=english
结构作为函数参数
使用一个函数用来打印信息,带参函数,参数调用结构
使用的时候调用我们需要打印的结构就行
// class1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>
void printstudent(struct Student student);
using namespace std;
struct Student {
int id;
char sex[5];
char name[10];
char subject[10];
};
int main()
{
Student jack;
//Student tom;
//数值类直接用.赋值,字符串数组类用字符串函数赋值
jack.id = 1;
strncpy(jack.sex, "man",5);
strncpy(jack.name, "jack son",10);
strncpy(jack.subject, "english",10);
//打印jack信息
printstudent(jack);
return 0;
}
void printstudent(struct Student student)
{
cout << "ID=" << student.id << endl;
cout << "sex=" << student.sex << endl;
cout << "name=" << student.name << endl;
cout << "subject=" << student.subject << endl;
}
指向结构的指针
struct Student *point;//定义一个结构指针
point = &jack;//指向了我们的变量jack
//打印jack信息
//printstudent(jack);
printstudent(&jack);
return 0;
}
void printstudent(struct Student *student)
{
cout << "ID=" << student->id << endl;
cout << "sex=" << student->sex << endl;
cout << "name=" << student->name << endl;
cout << "subject=" << student->subject << endl;
}
引用typedef关键字,用来取别名
typedef struct Student{};
Student jack;
473

被折叠的 条评论
为什么被折叠?



