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;