C/C++学习记录

零碎知识点记录

override 和final

override

父类存在虚函数,子类要对父类的虚函数进行重写时,在重写函数后面追加override。避免操作失误将重写函数时,将函数名foo写成fo0,编译器将fo0当成新函数编译通过(此时应为虚函数重写,函数名错误,编译器应该报错)

class A
{
virtual void foo();
}
class B :public A
{
void foo(); //OK
virtual foo(); // OK
void foo() override; //OK
}

final

类不再被继承 或者 虚函数不再被重写(使用final处为最后一次重写),可以在类名和虚函数后添加final关键字

class Base
{
virtual void foo();
};

class A : Base
{
void foo() final; // foo 被override并且是最后一个override,在其子类中不可以重写
void bar() final; // Error: 父类中没有 bar虚函数可以被重写或final
};

class B final : A // 指明B是不可以被继承的
{
void foo() override; // Error: 在A中已经被final了
};

class C : B // Error: B is final
{
};

Explicit

C++中的 explicit关键字主要是用来修饰类的构造函数,表明该构造函数是显式的,禁止单参数构造函数的隐式转换。

class MyClass
{
public:
MyClass(int num);
}
MyClass obj = 10; //ok, convert int to MyClass

上面的代码中编译器自动将整型转换为MyClass类对象,存在“隐式转换”,实际上等同于下面的操作:
MyClass temp(10);
MyClass obj = temp;

使用explict关键字后只能进行显示的转换。
class MyClass
{
public:
explicit MyClass(int num);
}
MyClass obj = 10; //Error
MyClass obj = (MyClass )10; //Ok

手动开辟内存

编码过程中使用到指针时,指针所指向的内容必须先合法,如果为变量,变量声明时已经开辟了内存空间。如果未开辟相应的空间,C语言需要使用malloc、calloc等手动申请固定大小的空间,用于数据存储,使用完毕还需要使用free手动释放申请的空间;相应的C++使用new申请空间,delete释放空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值