c++一些知识点

1.

构造函数:当没有写任何构造函数(含拷贝构造),系统会生成默认的无参构造,并且访问属性是共有。

默认拷贝构造:当没有写任何的拷贝构造,系统会生成默认的拷贝构造->是一个浅拷贝

写了拷贝构造函数,这两默认的就都没有了。

在c++中一个类可以有多个构造函数,被称为构造函数的重载。但是析构函数只能有一个。

2.

new delete maloc free的区别

new delete:调用对象的构造和析构初始化对象和清理对象。是安全的它们知道要分配和释放的对象类型。

malloc free:用于分配和释放内存块,而不是对象,是不安全的,返回void*,需要显式类型转换。

3.

常量指针指向一个常量数据,通过这个指针不能修改所指向的数据内容。

const int* p1;

int a=10;

const int b=20;

p1=&a;合法

*p1=30;不合法

p1=&b;合法

指针常量,指针常量本身是一个常量,这意味着一旦初始化后,指针的地址不能再改变,但是通过这个指针可以修改它所指向的内容。

int* const p2;

int a=10;

int b=20;

int* const p2=&a;//p2必须在定义时初始化

*p2=30;合法

p2=&b;不合法

const int c=33;

int* const p3=&c;//不合法

4.

static修饰成员属性:不依赖对象,类共用的,不可以被继承,类外初始化,不能在.h文件初始化(重定义问题),要在.cpp 文件初始化。

static 修饰成员函数:没有this指针,可以不依赖对象使用,类共用的,不可以声明为虚函数,不能直接调用类中的非静态成员,可以利用对象调用。

普通成员函数不但可以直接调用其他的普通成员函数,也可直接使用静态成员函数。

反过来不行,没this指针。

static类外:只在当前文件中可见。只初始化一次。

5.

virtual修饰虚函数,实现动态多态,哪些函数不能用virtual修饰,static,构造,友元,普通,类外,内联(编译确定展开,虚函数运行时确认)

子类重写父类的方法时,如果父类的方法是虚函数,那么子类的方法即使不显示地使用virtual,也是虚函数。

虚函数重写函数原型不用一模一样,例如协变:如果返回类型是指针或引用,重写函数可以使用基类返回类型的派生类,这称为协变返回类型

virtual Base* clone() const{return new Base(*this);}

Derived* clone() const override{return new Derived(*this);}

6.

inline内联函数:适用于代码少,调用频繁的函数,编译时,在执行的位置直接展开函数,是空间来换时间的操作。递归函数不能是内联函数,会导致代码膨胀,使得程序的可读性和可维护性大大降低栈溢出。

7.

多态时使用的是父类的虚函数列表错:多态性是基于派生类的虚函数表来实现的。当通过基类指针或引用调用虚函数时,实际调用的是派生类的虚函数表中的函数。

多态下子类定义了未重写的虚函数,由于不能通过父类指针调用,所以其并未出现在虚函数列表中。错即使子类定义了一个新的虚函数,而没有在基类中声明,该虚函数仍然会出现在子类的虚函数表中。通过父类指针无法调用的原因是父类中没有定义这个虚函数,而不是因为它不存在于虚函数表中。

8.

一个类对象可以包含虚函数列表的入口地址,不能包括静态成员属性,因为静态成员属性是类的属性,不是对象的属性,成员函数定义的变量是局部变量,类中虚函数成员函数的入口地址存在类的虚函数表中,而不是对象本身。

9.

c++中最小的编译单元是单个 .cpp 文件。

10.

使用 new 操作符,可以动态分配全局堆中的内存资源

一些情况下可以用free释放new,但是不推荐。

用 new 申请的空间,即使不调用 delete 释放空间,当程序退出时也会被回收在大多数操作系统中,当程序退出时,操作系统会自动回收程序占用的内存资源,包括由 new 运算符动态分配的内存空间。依赖程序退出时的内存回收会使得程序的资源管理不确定。在程序执行过程中,如果动态分配了大量内存而没有及时释放,可能会导致系统资源的浪费,甚至是内存泄漏。

11.

函数重载的特点:相同函数名,不同参数列表,返回类型不影响函数重载,一个类中定义了两个同名且参数列表也相同的函数,但其中一个是常成员函数也是函数重载,一个类中定义了两个同名且参数列表也相同的函数,但其中一个是静态成员函数。这不是函数重载,静态成员函数属于类本身,而非某个特定的对象实例。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值