C++基础学习

本学习笔记学习下面视频总结,和自己理解,感兴趣可以去学习。讲的很详细。

【北京迅为】嵌入式学习之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;

85e1ced12ff04183bc151223fcdb006f.png

2e48e12a79d34128a2264b72b0f7c402.png

 

堆(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:只能在自己的类里访问自己,不能通过对象来访问。

强行访问?先函数访问,再对象访问。可以输出。

c46346e4660a44eca68cbf2c0bfbc7a5.png

protected:也是只能在自己的类里自己访问自己,但是可以被派生类来访问

 

C++基本特性

1.类函数的重载特性

我们可以在类里面定义同名的函数,但是参数不可以相同

class student
{
public:
    char name[64];
    int age;
    void test();
    void test(int i);
    
  private:
    int a;
};

重载函数在调用时会根据函数参数类型,然后去匹配相应的函数进行调用。如:

 my.test(20);

2.构造函数和析构函数

析构函数:假如我们定义了析构函数,当对象被删除或者生命周期结束,就会触发。

构造函数:假如我们定义了构造函数,对象被创建的时候就会触发。

4a4f7955cd954598966239b0562c86df.png

构造函数可被重载,析构函数不行

 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;
};

f40f2b24527746dc95cd9024b206bf0a.png

触发两次打印两句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修饰,虚函数是用在类的继承上的。

17a71529f3ea42e39c735b3c949c5e11.png

虚函数优点

可以预留接口(覆盖),方便封装

纯虚函数

6c7f4b6312a440a49af008b3e0f12960.png

 

  • 37
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值