C++学习笔记(一)

描述

本篇文章为本人学习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) 多态性:同一个操作可以是不同对象的行为

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分