基础C++理论概况

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++ 中的类型限定符

类型限定符提供了变量的额外信息,用于在定义变量或函数时改变它们的默认行为的关键字。

限定符含义
constconst 定义常量,表示该变量的值不能被修改。
volatile修饰符 volatile 告诉该变量的值可能会被程序以外的因素改变,如硬件或其他线程。。
restrictrestrict 修饰的指针是唯一一种访问它所指向的对象的方式。只有 C99 增加了新的类型限定符 restrict。
mutable表示类中的成员变量可以在 const 成员函数中被修改。
static用于定义静态变量,表示该变量的作用域仅限于当前文件或当前函数内,不会被其他文件或函数访问。
register用于定义寄存器变量,表示该变量被频繁使用,可以存储在CPU的寄存器中,以提高程序的运行效率。

7、字符串

序号函数 & 目的
1strcpy(s1, s2);
复制字符串 s2 到字符串 s1。
2strcat(s1, s2);
连接字符串 s2 到字符串 s1 的末尾。连接字符串也可以用 + 号,例如:
string str1 = "runoob";
string str2 = "google";
string str = str1 + str2;
3strlen(s1);
返回字符串 s1 的长度。
4strcmp(s1, s2);
如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回值小于 0;如果 s1>s2 则返回值大于 0。
5strchr(s1, ch);
返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。
6strstr(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;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值