C++多态相关

作者: saviochen | 来源:发表于2017-08-02 22:15 被阅读49次
1、类成员初始化

若使用编译器自动生成的默认构造函数初始化,则类中每一个成员,使用以下规则来初始化:
1)类成员运行其默认构造函数初始化;
2)内置成员或者复合型成员的初始化依赖于作用域(和普通变量相同,例如全局int初始化为0,局部string也自动初始化为空)。

2、复制构造函数

string null_book = "9-99-9"先创建了一个临时string变量,然后使用复制构造函数创建null_book 。值得注意的是,很多编译器能将以上语句等价于string null_book ("9-99-9"),跳过复制构造函数直接调用普通构造函数创建对象。,这是编译器做了优化的结果。

3、不可重载的运算符
::    .*    .     ?: 

它们的共同点是,带有点号

4、如何限制栈对象的生成,如何限制堆对象的生成

产生堆对象的唯一方法是使用new操作,通过禁止使用new,(重载new和delete运算符,并设为private),即可禁止产生堆对象。

将构造函数,析构函数设为private,系统就不能再栈内生成对象了。

5、虚函数的访问

1)通过对象名访问虚函数,无法动态联编,调用该类本身方法;
2)通过指针访问虚函数,动态联编;
3)通过引用访问虚函数,与指针访问类似,但是一经绑定,无法修改指向,可提高访问的安全性,又称为“受限指针”。

6、RTTI

Runtime Type Identification RTTI通过运行时类型识别,程序能够使用基类的指针或引用来检索这些指针或引用所指向的对象的实际类型。
1)typeid操作符返回指针或引用所指向的实际类型
2)dynamic_cast将基类类型的指针或引用安全转换为派生类的指针或引用。

7、cast

1)static_cast:编译器执行的隐式转换都可以用static_cast显示完成;

double d = 97.0;
int i = static_cast<int>(d);

2)const_cast:转换掉const性质,只有添加或删除const时可用,否则编译出错;

const char * p;
char * pc = const_cast<char *>(p);

3)reinterpret_cast:C++指针间不支持隐式转换,需要显式强制转换;

int * pint;
char * pc = reinterpret<>char*>(pint);//与圆括号强转功能相同

4)dynamic_cast:运行时类型检查,将基类类型的指针或引用安全转换为派生类的指针或引用。

8、容器使用要求

容器元素类型需要满足以下两个约束:
1)元素类型必须支持赋值运算
2)元素类型的对象必须可以复制

除引用类型外,所有内置或复合类型都可以用作容器的元素类型。引用不支持一般意义的赋值运算,因此没有元素是引用的容器。

9、new异常

new在失败后,抛出标准异常,std::bad_alloc而不是返回nullptr

相关文章

  • C++多态相关

    1、类成员初始化 若使用编译器自动生成的默认构造函数初始化,则类中每一个成员,使用以下规则来初始化:1)类成员运行...

  • 2020-07-06----《C++类的学习》

    函数重载:同名不同参。 C++类的特点:封装、继承、多态。 //多态与函数重载是啥关系? 虚函数:和软件架构相关 ...

  • C++ 多态相关问题

    1.new和molloc()的区别来自于https://www.cnblogs.com/ywliao/articl...

  • 深刻剖析之c++博客文章

    三大特性 封装、继承、多态 多态 C++ 虚函数表解析C++多态的实现原理 介绍了类的多态(虚函数和动态/迟绑定)...

  • 多态的C++实现

    多态的C++实现 1 多态的原理 什么是多态?多态是面向对象的特性之一,只用父类指针指向子类的对象。 1.1 多态...

  • C++ 的多态(Polymorphism), virtual f

    多态 c++支持两种多态,编译时多态和运行时多态但其实编译时多态根本不是真正的多态,编译时多态就是函数的重载,ov...

  • C++第六篇多态

    C++中的多态性分为编译时多态性和运行时多态性,编译时多态通过函数重载和模板体现,运行多态通过虚函数体现编译、连接...

  • 面试题目收集总结

    C++: 多态: 多态性都有哪些?(静态和动态,然后分别叙述了一下虚函数和函数重载) c语言和c++有什么区别?(...

  • C++的多态

    C++三大特性:封装、继承和多态。其中最好理解的就是封装了,继承作为C++面向对象的特征也不难理解,那么多态,应该...

  • 实现golang语言的多态

    如何实现golang语言的多态? C++里面有多态是其三大特性之一,那么golang里面的多态我们该怎么实现? g...

网友评论

    本文标题:C++多态相关

    本文链接:https://www.haomeiwen.com/subject/hdtulxtx.html