background image

11.虚基类:如果基类被声明为虚基类,则重复继承的基类在派生磁对象实例中只好存储

一个副本,否则,将出现多个基类成员副本。
   

  

虚基类说明格式如下: virtual<继承方式><基类名>

                         class B:virtual public A
  注意:a.如果一个派生类有直接或间接的虚基类,那么派生类的构造函数的成员初始列

表中必须列出对虚基类的调用,如果未被列出,则表示使用该基类的缺省构造函数来初
始化派生类对象中的虚基类子对象。
        b.虚基类的构造函数先于非虚基类的构造函数调用。
        c.只有建立对象的那么个派生类的构造函数调用虚基类的构造函数,而该派生类的

    

基类中所列出的对这个虚基类的构造函数的调用在执行中被忽略。
12.运算符重载:

      operator 函数用法:(不能有下列字符:'::','.','*','->','? :')
          1.一般:int class_name::operator <运算符> (形参列表)   (例 92)

          2.增量减量运算符:   (例 93,94,95,96)
               a.将一个增量运算符重载为前置的成员函数:

                           int class_name::operator++();
               b.将一个增量运算符重载为后置的成员函数:

                           int class name::operator++(int);
               c.将一个增量运算符重载为前置的友元函数:

                           int operator ++(class_name&);          
               d.将一个增量运算符重载为前置的友元函数:

                           int operator ++(class_name&,int);      
               e.下标运算符:

                           int class_name::operator[](形参)  //只能是非静态成员函数 
               f.

  

函数调用运算符:

                           int class_name::operator()(形参表)//只能是非静态函数,且不可

以带有缺省的参数
               g.成员选择运算符:
                           class_name $/* class_name::operator->();

               h.new delete

 

运算符:

                           void *class_name::operator new(siz_t,<arg_list>);

                           void *class_name::operator delete(void *,<size_t>); 
                   new delete 只能被重载为类的成员函数,不能是友元。而且无论是否使用

关键字 static
                   进行修饰,重载了的 new 和 delete 均为类的表态成员函数。

                       对于 typedef unsigned size_t;
                   在头文件 alloc.h,mem.h,stddef.h,stdio.h,stdlib.h 均说明;

               i.友元函数:
                       可以是一个类的非静态函数,也可以是类的友元函数。

                      {friend complex operator+(complex&,complex&);
                      }   

                 以下五种运算符不说明成友元运算符:
                      "=","()","[]","->","type";  

               j.转换函数:
                         class_name::operator type();  //type 是任何一个合法的 C++的类

型名(包括基本数据类型和导出数据类型)以及由关键字 const 和 volatile 引出的表达

示。)
                                                        //不带任何参数,也无返回值类型,总是返回
type 的值。只能是类的成员函数,不能说明为友元运算符。

               k.类的赋值运算与运算符重载:
                         person & person::operator=(person &p)

                           {dele Name;
                            Name=new char[strlen(p.Name)+1];

                            strcpy(Name,p.Name);
                            Age=p.Age;

                            Sex=p.Sex;