zoukankan      html  css  js  c++  java
  • 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函数,因为,父类和子类的构造析构顺序的原因,子类在构造或析构期间,

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

        

  • 相关阅读:
    五小步让VS Code支持AngularJS智能提示
    AngularJS----服务,表单,模块
    AJAX 动态加载后台数据 绑定select
    连接mysql 报错 Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
    MAC中向阿里云服务器上传文件
    使用Navicat连接阿里云ECS服务器上的MySQL数据库
    mysql面试题:字段中@之前字符相同且大于等于2条的所有记录
    2018 最新手机号正则(最新最全)
    php同一个用户同时只能登陆一个, 后登陆者踢掉前登陆者(排他登陆)
    php 单冒号 、双冒号的用法
  • 原文地址:https://www.cnblogs.com/gaozhichao/p/5287719.html
Copyright © 2011-2022 走看看