C++学习心得
一周的C++学习结束了 从C++的简介,各种专业术语的介绍到最后的标准模板库,对于这个c的加强版的语言有了一定的认识理解,但是由于6天时间学完了全部,而且由于疫情在家里上了两天网课,对于一些运用层次还不是很熟悉,学的重点放在了面向对象。对于学到的内容,对重点进行了以下整理,太过简单的或者不重要的仅作了解,不做概述。
C++里的特性及专业术语
(1)类:class
描写现实世界中的事物(包括特征和行为),例如:人,特征:身高、年龄、性别、肤色,行为:吃饭、走路、睡觉等等,它实质是抽象的描述事物,它其实是不存在的。
(2)对象
对象是类的实例化,实实在在存在于现实世界中,特指的概念
(3)继承
相当于是一个新类共享了另一个或多个类的特征和行为,该新类和其他类的关系,称之为继承,例如:儿子 父亲 ----继承
(4)多态
多种形态,一种接口,多种方法,举例:你(8岁) 父亲 -----买票行为-----你买票(半票)—父亲(全票)
(5)封装
c语言里函数就是封装的概念,将数据和数据的操作封装在一起
(6)组合(聚合)
一个类中包含了另一个类的对象,就将类和另一个类的对象的关系,称之为组合关系
(7)静态联编(静态绑定)
一个数据的表达式的类型在编译的时候就已经确定了,称之为静态绑定
(8)动态绑定(动态联编)
一个数据的表达式的类型在运行的时候才确定,称之为动态绑定,典型:多态
(9)特征&属性
在C++特征&属性就是代表变量,如果变量存在于类中,那么称之为成员变量
(10)行为&方法
在C++行为&方法就是代表函数,如果函数存在于类中,那么称之为成员函数
4、C++的程序的编译
跟C编译过程类似
#include <iostream>
#include <cstdio>
//如果想要用到C库里的内容,需要包含C库的头文件,头文件的格式:头文件前面加上c,不需要写后缀.h
//#include 宏----后面紧跟的内容是库文件或者是用户自定义的头文件
//<>-----如果是使用<>符号来包含头文件或者是库文件,那么首先会去标准库里去找头文件
//“”-----如果是使用“”符号来包好头文件或者是库文件,那么它首先是去当前的工程路径去寻找相应的内容
//iostream----iostream是C++提供标准库里的文件,所以没有加后缀.h,如果这里是包含的用户自定义的头文件,那么就需要加上后缀.h
//iostream----原因:cout流对象(它是ostream类的实例化),它是在iostream里实例化
using namespace std;//使用标准库提供的命名空间std,cout/cerr/clog/cin/endl/ends等等它都是属于命名空间std里的内容
int main()//main函数程序执行的开始也是程序执行的结束
{
printf("你好,世界");
cout << "hello world" << endl;//打印hello world
//cout输出流对象,可以用于输出相关信息,它是在头文件iostream里实例化
//endl结束换行流对象,类似于C里“\r\n”
//<<----相当于输出仪器
//“hello world”——向控制台输出的内容
return 0;//程序的结束标志
}
首先学习的命名空间
//如何进行声明
//关键字--------namespace
namespace 标识符的名称
{
//代码块或者是语句块
}
//例如:
namespace zhang
{
int a;
}
//如何进行访问
//1命名空间的名称 ::需要访问的内容
namespace zhang
{
int a;
}
zhang ::a;
//2
namespace zhang
{
int a;
}
using zhang::a;//如果后面用到a,那就表明是命名空间里的a
```//访问格式3:
//关键字:using、namespace
//格式:
// using namespace 命名空间的名称;//告诉程序在该语句后用到命名空间里定义的变量、函数都是属于命名空间里的内容,相当于是可以访问命名空间里的所有的内容
//例如:
namespace zhang
{
int a=50;
int b=60;
}
using namespace zhang;
//无名(没有名字)的命名空间
//声明格式:
namespace //表示声明的无名的命名空间
{
//代码块或者语句块
}
//例如:
namespace
{
int a;
}
//访问格式:
//符号:域作用符号------::
//格式:
::需要访问的内容
//例如:
namespace
{
int a;
}
::a;
注意的是:
(1)命名空间是可以发生嵌套
(2)命名空间可以分为有名的命名空间和无名的命名空间(实际开发中有名的名空间用的比较多)
(3)命名空间是属于全局的一部分,只不过是取了全局的一块区域命了一个名称而已
(4)访问命名空间的时候需要用到域作用符号
然后学习了开辟内存
动态内存
动态内存:程序在运行时才分配的空间,称之为动态内存,例如,在C语言里,可以用malloc和free两个函数,来动态的开辟堆区空间和释放堆区空间,C++提供了new和delete操作符来操作堆区的空间(动态的开辟空间)
new:用于开辟堆区空间,相当于是C里的malloc
delete:用于释放堆区空间,相当于是C里的free
1、开辟变量地址空间
操作符:new
格式:
数据类型(内置的基本的数据类型和自定义的数据类型) * 标识符名称 = new 数据类型 ;//在堆区开辟变量地址空间,用标识符名称来指向堆区空间,堆区空间的大小就是数据类型的大小
例如:
int * p = new int ;//在堆区开辟int类型大小的空间,并且用p指向该空间
//或
int * p ;
p =new int ;
释放变量地址空间:
delete p;
开辟变量地址空间的时候同时进行初始化工作:
格式:
数据类型(内置的基本的数据类型和自定义的数据类型) * 标识符名称 = new 数据类型(初始值) ;//在堆区开辟变量地址空间,用标识符名称来指向堆区空间,堆区空间的大小就是数据类型的大小,同时向堆空间里存放初始值
例如:
int * p = new int (50);//开辟堆空间的时候同时对该空间进行初始化工作,初始化为50
释放:
delete p;
开辟数组地址空间(一维数组)
格式:
数据类型(内置的基本的数据类型和自定义的数据类型) * 标识符名称 = new 数据类型 [ 数组的大小 ] ;//在堆区开辟变量地址空间,用标识符名称来指向堆区空间,堆区空间的大小就是数据类型的大小,同时指定数组的大小
例如:
int *arr = new int[10] ;//在堆区开辟一个具有10个元素的数组空间
释放:
delete [] arr ;
开辟数组地址空间的时候同时进行初始化工作:
格式:
数据类型(内置的基本的数据类型和自定义的数据类型) * 标识符名称 = new 数据类型 [ 数组的大小 ] {元素值};//在堆区开辟变量地址空间,用标识符名称来指向堆区空间,堆区空间的大小就是数据类型的大小,同时指定数组的大小和初始值
例如:
int *arr = new int[5]{
1,2,3,4,5};
释放:
delete [] arr;
然后是最重要的类和对象
类和对象
1、类(class)
描述现实世界中的事物,用C++进行编程的时候,通常是将现实世界中的事物用类来进行描述,类的关键字:class,描述一个人,特征:姓名、年龄、性别、肤色等等,行为:吃饭、睡觉、走路、跑步等等,类是一个泛指(抽象)的概念,不是特指某一个事物,简单的理解为没有实实在在存在于现实世界中(只是你脑海里一个概念)
用类描述事物的格式:
class 类名(标识符名称)
{
//特征—变量
//行为—函数
};
例如:描述一个人,人具备:姓名、年龄、性别、肤色等特征, 具备:吃饭、睡觉、走路、跑步等行为
class People
{
//特征
char name[5];//name用于描述姓名
int age;//age用于描述年龄
char sex;//sex用于描述性别
char fuse;//fuse用于描述肤色
//行为
void eat()//吃饭
{
}
void sleep()//睡觉
{
}
void walk()//走路
{
}
void run()//跑步
{
}
};
2、对象
对象是类的实例化(特指实际的例子),是特指的概念,例如:人(泛指的概念)-----对人进行实例化------张三(特指的概念)
对象的实例化格式:
(1)在栈区实例化--------栈区实例化的对象,不需要用户手动的去释放内存,编译器会自动释放内存
格式:
类名 对象名(标识符名称);
例如:
People zhangsan;
类似C里的------>int a;
(2)在堆区实例化-------堆区实例化的对象,需要用户手动的去释放内存,如果不释放,很容易造成内存泄露
格式:
类名 * 对象名(标识符名称)= new 类名;
例如:
People * lisi = new People;
(3)如何访问类里面的成员(成员变量+成员函数)
根据在内存里实例化的方式不同,访问也有所不同
a、在栈区实例化
访问成员格式:
对象名(标识符名称). 成员;
例如:
zhangsan.eat();//访问People里的eat方法
b、在堆区实例化
访问成员格式:
对象名(标识符名称)-> 成员;
例如:
lisi->sleep();
类的成员访问修饰符
作用:为了保护类的成员,C++提供了三种类的成员访问修饰符
public(公共)、protected(受保护)、private(私有)
访问修饰符的作用范围:
a、从public:后面开始一直到类体结束(类的后括号之前 })都是属于public属性下的成员
b、如果有两个或者两个以上的成员访问修饰符,从第一个访问修饰符开始到另一个当问修饰符开始