C++ 之 class 的思考

工作多年,突然发现c++这么多年都是零散记录了些自己对C++的反思,没有做过任何的文字记录表示遗憾。

看到很多小伙也都在写技术博客,那我自己也就写一写自己的一些 思考吧!

C++的基本类这个东西,想必每个学过计算机语言的同学对这个class多有自己的理解。

C++中的类其高深莫测的内部细节,与其他语言不大相同,最为C++er 应该清晰地了解一个类的内部构造以及编译器为你做了什么,

这样才能省去很多未知的坑!!

  对于一个class来说,编译器一般都会为你自动编写了 默认构造函数、拷贝构造函数、重载赋值符、析构函数。当然,如果你自己声明并实现了如上对应的函数,

编译器将不再为你提供相应的函数。 这里强调一点默认的拷贝构造函数与赋值符 内部是浅拷贝形式,如果在class内部有存在指针类型的成员变量,你就应该重载

相应的赋值符与拷贝构造函数。

  注意1:重载=号时,返回的引用  应该是*this!!

  注意1:拷贝构造与赋值符 也应该 对其所继承父类进行构造或者赋值!!!!

  c++ 有了类的概念,而且作为一个面向对象语言,就应该有封装、继承、多态 这三个面向对象语言的特性。

  一、class和struct在c++中基本没有太大区别,它俩为c++提供封装特性,class与struct的区别在于,class默认为private,而struct默认为public。

  二、c++的继承有些复杂,它支持多继承!导致臭名昭著的菱形继承的问题,当然也有解决方案,此问题后期再做讨论!

  三、C++的多态,基于继承, 父类调用相应的函数展现出不同形态就为多态。C++的多态解决了C++没有接口关键字或者接口这个东西!

    注意,如果要用多态这个特性,请你记住基类的析构函数必须是virtual!! 因为指向子类的父类指针,在析构的时候如果父类的析构函数不是virtual类型,则不会调用到

  子类的析构函数,可能造成资源泄露!  相反:如果这个类不是用作基类或者多态来用,不应该声明virtual 析构!!!!

     同理 你如果要使用多台这个特性,virtual的虚成员函数,可以构建一个虚函数表让父类调用函数时明确调用的具体函数!当然一个class的虚函数表是在整个类的最前端!

     说到virtual 还有一个重要的情况需要记录在案!那就是最好不要在析构和构造中调用 virtual函数,因为,父类和子类的构造析构顺序的原因,子类在构造或析构期间,

    有可能之调用的是父类函数,或者父类已经析构,都会造成未知的错误!!!

    

原文地址:https://www.cnblogs.com/gaozhichao/p/5287719.html