网站首页

人工智能P2P分享搜索全网发布信息网站地图标签大全

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

C++学习笔记(一)

时间:2023-03-07 15:54

人气:

作者:admin

标签: C++  函数  代码  指针  编译 

导读:上述代码中,函数func直接=0,表示纯虚函数,含有纯虚函数的类教抽象类。其派生类必须对函数func进行重写实例化,不然也是抽象类。也就是说,Father s;编译会报错。...

本篇文章为本人学习C++过程中记录的学习笔记,看的是哔站黑马程序员视频,本人觉得讲的非常棒,感兴趣的可以看看,以下内容欢迎大家阅读和批评指正。

1、指针系列:

(1)① 常量指针 :const int *P; (const修饰指针)

特点:指针的指向可以更改,但是指向的值不可以更改。

指针常量 :int * const P; (const修饰常量)

特点:指针的指向不可以更改,但是指向的值可以更改。

const既修饰指针,又修饰常量的: const int * const p;

特点:指向的值都不能发生改变。

(2) this指针 :本质是指针常量。

2、 静态成员

(1)静态成员变量 :所有对象共享这一样的数据、类内声明,类外初始化;

(2)静态成员函数 :所有对象共享一个函数、静态成员函数只能访问静态成员变量。

3、多态:

看如下代码:

#include
using namespace std;
class Father
{
public:
void func()
{
    cout << "调用父类成员func()函数成功!" << endl;
}
};
class Son:public Father
{
public:
void func()
{
    cout << "调用子类成员func()函数成功!" << endl;
}
};
void test(Father& f)
{
    f.func();
}
int main()
{
   Son s1;
   test(s1);
}

这个程序的执行结果是:调用父类成员func()函数成功!

为了能够输出“调用子类成员func()函数成功! ”,解决办法就是用虚函数,在父类Father的func函数前加个virtual。

得注意以下几点:①如果是这样test(Father* f),指针和引用是一样的; ②发生这种动态多态,必须得有继承关系; ③子类重写父类的虚函数,子类加不加virtual都可以( 一般不加,好区分 )。

(1) 纯虚函数与抽象类

class Father
{
  Public: virtual void func() = 0;
};

上述代码中,函数func直接=0,表示纯虚函数,含有纯虚函数的类教抽象类。 其派生类必须对函数func进行重写实例化,不然也是抽象类。 也就是说,Father s; 编译会报错。

和虚函数差不多,一般写成纯虚函数的都是为了不让其代码实现,而是让子类实现。

(4) 虚析构和纯虚析构 :(解决的同一个问题,方法不同)

多态在使用的时候,如果子类中有属性开辟到了堆区,那么父类指针在释放空间时无法调用到子类的析构代码,应该如何解决?

注:父类的指针在析构的时候,不会调用子类的析构函数。 导致,如果有子类堆区属性,会出现内存泄漏,也就是delete不了。

解决方法:在父类的析构函数前加上virtual关键字即可。

如果采用的是纯虚析构的话,virtual ~Father()=0;但是,还得在类外初始化一下才行。 Father::~Father(){}

注:有了纯虚析构的类也是抽象类,无法实例化对象。

(5) 多态性:同一个操作可以是不同对象的行为

上一篇:

下一篇:

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信