本学习笔记学习下面视频总结,感兴趣可以去学习。讲的很详细
【北京迅为】嵌入式学习之QT学习篇_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1tp4y1i7EJ/?spm_id_from=333.337.search-card.all.click&vd_source=8827cc0da16223b9f2ad8ae7111de9e2
目录
C++
1.C++和C语言区别
2.C++的类
3.什么是对象
4.类的函数成员
5.类的访问修饰符
C++基本特性
1.类函数的重载特性
2.构造函数和析构函数
3.类的继承
4.虚函数和纯虚函数
C++
1.C++和C语言区别
c++是面向对象,c语言是面向过程
比如直接计算a+b是面向过程,给a+b穿上一层衣服就是面向对象,不是直接相加。
2.C++的类
c结构体升级版,类成员不止可以是变量也可以是函数。
定义:
class student
{
public: //类的访问修饰符
char name[64];
int age;
};
3.什么是对象
类的实例化。
//直接定义
student my; //student就是类,my就是对象
//在堆里面定义
student *my = new student;
//C++中进行动态内存分配的一个例子。它在堆上创建了一个新的"student"类的对象,并将该对象的地址赋给指针变量"my"。这样可以让你使用超出对象创建函数或块的范围的对象。只需记得在使用完对象后使用"delete"关键字来正确释放内存,以防止内存泄漏
访问和c一样
student my;
student *my1 = new student;
my.age = 18;
my1->age = 19;
cout << my.age <<endl;
cout << my1->age <<endl;
堆(heap)和栈(stack)是两种不同的内存分配方式,它们在内存中的位置和分配方式有所不同。
栈是一种线性的数据结构,它是一块连续的内存空间,存储程序在运行过程中的临时数据和函数调用。栈的大小受限于系统设置的栈大小,通常比较小,变量的分配和释放是自动的,由系统自动管理,每次只能访问栈顶元素。
堆是一种动态分配的内存空间,它的大小不受限制,程序员可以根据需要动态分配和释放内存。堆的内存分配和释放由程序员手动管理,需要注意内存泄漏的问题。
在C++中,使用new和delete操作符可以分别在堆上动态分配内存和释放内存;在Java中,使用new关键字来在堆上创建对象,而垃圾收集机制会负责释放内存。
4.类的函数成员
第一步:在类里面声名
第二步:实现这个函数。我们可以直接在类里面写,也可以在写在类的外面。
直接写在类里面
class student
{
public:
char name[64];
int age;
void test(){
cout << 123 <<endl;
};
};
类外面
student::表示属于这个类里面的函数,不这样的话会识别成普通函数
class student
{
public:
char name[64];
int age;
void test();
};
void student::test(){
cout << 123 <<endl;
};
访问函数和访问变量是一样的。
5.类的访问修饰符
对类的成员进行权限管理。
public:表示函数和变量是公开的,任何人可以访问。
private:只能在自己的类里访问自己,不能通过对象来访问。
强行访问?先函数访问,再对象访问。可以输出。
protected:也是只能在自己的类里自己访问自己,但是可以被派生类来访问
C++基本特性
1.类函数的重载特性
我们可以在类里面定义同名的函数,但是参数不可以相同
class student
{
public:
char name[64];
int age;
void test();
void test(int i);
private:
int a;
};
重载函数在调用时会根据函数参数类型,然后去匹配相应的函数进行调用。如:
my.test(20);
2.构造函数和析构函数
析构函数:假如我们定义了析构函数,当对象被删除或者生命周期结束,就会触发。
构造函数:假如我们定义了构造函数,对象被创建的时候就会触发。
构造函数可被重载,析构函数不行
student *my1 = new student(10);
定义:
class student
{
public:
student();
char name[64];
int age;
void test();
void test(int i);
private:
int a;
};
student::student(){
cout << "hello" <<endl;
};
触发两次打印两句hello
名字和类名一模一样;析构函数前面加~,构造函数不用。
student::~student(){
cout << "hi" <<endl;
};
int main()
{
//test();
student my;
student *my1 = new student;
my.age = 18;
my1->age = 19;
cout << my.age <<endl;
cout << my1->age <<endl;
my.test(20);
delete my1;
return 0;
当对象被删除或者生命周期结束,就会触发。打印2个hi。
3.类的继承
允许在新的类里面继承父类的public还有protected部分,private不能被继承
当觉得这个类不好的时候,可以使用类的继承,添加我们需要的功能。
class 儿子:public爸爸{
public:
.........
protected:
}
//例子
class mystudent:public student
{
public:
int grade;
};
访问。也是通过.和->来访问
my2.grade = 1;
my2.age = 15;
cout << my2.grade <<endl;
cout << my2.age <<endl;
4.虚函数和纯虚函数
虚函数:有实际定义的,允许派生类对他进行覆盖式的替换(子类覆盖),virtual来修饰。
纯虚函数:,没有实际定义的虚函数就是纯虚函数
virtual void test(); //虚函数
virtual test(){} //纯虚函数
怎么定义一个虚函数?
用virtual修饰,虚函数是用在类的继承上的。
虚函数优点
可以预留接口(覆盖),方便封装