zoukankan      html  css  js  c++  java
  • C++学习笔记

     

    构造函数: 

      构造函数里的参数不应该和成员属性名一样,否则编译可以通过,结果大吃一惊。构造函数可以直接写在类里面,也可以另外通过域操作符写在类外面。C++里面,如果你构造函数一个没写,编译器默认给你准备了一个。一旦你写了构造函数,编译器就不给你准备了。这个和Java似乎不太一样。反正,正常人都会写不止一个的构造函数吧。自己好好写是没有错的。

    函数的重载:

      重载函数的参数个数、参数类型或参数顺序3者中必须至少有一种不同,函数返回值类型可以相同也可以不同。
      函数的重载一定发生在相同范围,一定是同一个类。
      virtual关键字可有可无。operator 运算符重载不影响优先级。不是所有的运算符都能被重载,以下运算符不能被重载:
      :: 作用域解析运算符
      ? : 条件运算符
      .  直接成员运算符
      .* 解除类指针引用运算符
      sizeof
     
         类成员函数的运算符重载,单目运算符 列表没有参数,双目运算符有一个参数,this指针看作一个对象。
       友元函数可以访问的类的私有成员和保护成员。使用友元函数可以提高性能,如用友元函数重载操作符生成迭代器类。
       用友元函数可以访问两个或多个类的私有数据,使人们更容易理解程序的逻辑关系。
     使用友元函数前应注意:
       类的友元函数在类作用域之外定义,但可以访问类的私有和保护成员
       尽管类定义中有友元函数原型,友元函数仍然不是成员函数
       由于友元函数不是任何类的成员函数,所以不能用句柄(对象)加点操作符来调用
       public, private, protected成员访问符与友员关系的声明无关,因此友元关系声明可在类定义的任何位置,习惯上在类定义的开始位置
     
    析构函数:
      完成对象被删除前的一些清理工作。
      在对象的生存期结束的时刻系统自动调用它,然后再释放此对象所属的空间。
      如果程序中未声明析构函数,编译器将自动产生一个默认的析构函数。
      析构函数不返回任何值,没有函数类型,也没有函数参数。也不能重载。
     
    静态数据成员:
      如果想在同类的多个对象之间实现数据共享,可以用静态的数据成员。静态数据成员是一种特殊的数据成员。它以关键字static开头。
      静态数据成员不属于某一个对象,在为对象所分配的空间中不包括静态数据成员所占的空间。静态数据成员是在所有对象之外单独开辟空间。只要在类中定义了静态数据成员,即使不定义对象,也为静态数据成员分配空间,它可以被引用。
      在一个类中可以有一个或多个静态数据成员,所有的对象共享这些静态数据成员,都可以引用它。
      静态数据成员是在程序编译时被分配空间的,到程序结束时才释放空间。
      静态成员变量不属于对象的一部分,而是类的一部分,所以程序可以在还没有诞生任何对象的时候就处理它。但首先你必须初始化它,但只能在类体外进行初始化。 
       int Box::height=10; //表示对Box类中的数据成员初始化

      一般形式为:

      数据类型  类名::静态数据成员名=初值;

      不必在初始化语句中加static。

      不能用参数初始化表对静态数据成员初始化。

      静态数据成员既可以通过对象名引用,也可以通过类名来引用。

      静态数据成员并不是属于对象的,而是属于类的,但类的对象可以引用它。
      静态数据成员被定义为私有的,则不能在类外直接引用,而必须通过公用的成员函数引用。
     
    静态成员函数:
      在类中声明函数的前面加static就成了静态成员函数。如  static int volume( );
      静态成员函数是类的一部分,而不是对象的一部分。如果要在类外调用公用的静态成员函数,要用类名和域运算符“::”。如Box::volume( );
      也允许通过对象名调用静态成员函数,如a.volume( ); 但只是用a的类型而已。
      静态成员函数的作用是为了能处理静态数据成员。
      静态成员函数与非静态成员函数的根本区别是:非静态成员函数有this指针,而静态成员函数没有this指针。
      静态成员函数不能默认访问本类中的非静态成员。
     
    继承与派生
      基类的函数必须具有virtual才能满足覆盖的条件。
      基类中的protected方法只能被派生类访问。
      派生类从基类公有继承,基类的公有成员和保护成员在派生类中仍然公有成员和保护成员。
      派生类从基类保护继承,基类的公有成员和保护成员在派生类中都变成保护成员。
      派生类从基类私有继承,基类的公有成员和保护成员在派生类中变成私有成员。
      隐藏是指 派生类的函数屏蔽了与其同名的基类函数。
      派基类的函数同名,参数不同,此时无论有无virtual关键字,基类的函数都被隐藏。(别和重载混淆)
      派基类的函数同名,参数相同,此时基类的函数被隐藏(别与覆盖混淆)
      构造函数先调用基类,然后再调用派生类。析构函数则相反。
     
  • 相关阅读:
    javascript 基本数据类型
    数据库管理小工具帮助
    CSS3实现32种基本图形
    面试题2:替换空格
    面试题1:二维数组中查找
    图的深度优先和广度优先搜索算法
    Spring+Maven+Dubbo+MyBatis+Linner+Handlebars—Web开发环境搭建
    Spring学习笔记—最小化Spring XML配置
    Spring学习笔记—装配Bean
    Spring学习笔记—Spring之旅
  • 原文地址:https://www.cnblogs.com/ligongzi/p/2666802.html
Copyright © 2011-2022 走看看