C++面向对象程序设计笔记

1.保护成员只能被类内或者派生类访问,其他类不能访问。


2.只有public类型的变量才可以被该类的对象直接访问。基类的对象和派生类的对象都不能直接访问类的保护成员和私有成员。这也就是C++中类和struct的区别。C++类中不指定访问权限,默认是private的,而struct默认是public的。


3.基类无论怎么样被继承,派生类都将无法访问基类的私有成员。


4.公有成员可以被成员函数或类的对象所访问,私有成员只能在能类被访问,保护成员能被成员函数或派生类所访问,类的对象和派生类的对象都不能访问保护成员。


5.如果想要访问私有成员可以通过所在类的公有成员进行访问。因为公有成员是类的接口。


6.虚基类:使基类在派生类中只产生一个子对象。


7.不能重载的运算符:解除引用运算符,条件运算符,作用域标识符,成员选择运算符,sizeof


8.友元类和友元函数:如果想访问你想访问的类,就把友元类和友元函数写在这个类里面。(友元类和友元函数只能写在类里面。如果你想访问一个人的隐私,就让他把你单做他的朋友,)


9.友元函数不是类的成员函数,其不属于类,自然也就没有用于指向对象的this指针。所以函数的参数都要有函数的形参表给出,如果是单目运算符,参数列表为一个对象,……。在++和--这样的运算符,为了区分是前缀还是后缀,形参表为空表示前缀,而在形参表中放一个整形参数int,表示后缀运算符。


10.单目运算符的调用:对象 运算符  或 运算符 对象。如果运算符的操作数的类型是类类型,则其使用的是运算符重载功能;如果操作数类型是基本数据类型则其使用的是预定义运算符的预定义功能。


11.当重载为友元函数时要用对象的引用作为函数的参数。


12.运算符重载函数有两种方式:定义为类成员函数或友元函数。


13.单双目运算符重载为成员函数的时候,第一个操作数是由对象给出的。


14.运算符重载的方法:任何运算符重载实际上只是类型的扩充,将原有的系统预定义类型扩充到类类型。运算符重载的方法实际上就是将对象的运算转换为对象的数据成员的运算,而数据成员一般都是系统预定义类型,可以利用系统与定义运算符进行运算。


15.虚函数:在基类中被virtual声明,在派生类中重新定义其功能的函数,在基类中定义。作用:允许在派生类中重新定义与基类同名的函数,并可以通过基类指针或引用来访问积累和派生类中同名的函数。


16.重载函数和虚函数的区别:重载函数函数名一样,但是函数的返回类型和参数都不一样;虚函数不仅仅是同名的函数,而且原型也必须相同。


17.在虚函数中,如果基类指针指向基类对象则执行基类中的函数,如果基类指针指向派生类对象,则执行派生类中的函数。


18.虚函数使用规则:
   实现运行时多态的关键首先是要声明虚函数,且虚函数的定义在基类中进行,另外,必须用基类指针调用派生类的同名函数,负责虚函数将失去意义。
   基类指针虽然能获取派生类对象的地址,但只能访问派生类从基类继承而来的成员,所以必须用虚函数通过基类指针访问派生类的成员。
  虚函数必须是类的成员函数
  一个虚函数,在派生类中相同的重载函数都保持虚拟性,也就是这些同名函数在派生类中也是同名函数,不管有没有关键字virtual声明
  不能将友元函数声明为虚函数,但虚函数可以是另一个类的友元
  构造函数不能是虚函数 但析构函数可以是虚函数
  如果仅仅返回类型不同,其既不具有虚函数特性,同时也不是函数重载,只能认为是错误重载


19.纯虚函数和抽象类:要是不确定要实现什么功能,就把基类中的函数声明为纯虚函数。将含有纯虚函数的类叫做抽象类。


20.至少包含一个没有定义其特殊功能的纯虚函数的类属于抽象类,抽象类只能用作其他类的基类,不能建立抽象类的对象,但是可以声明抽象类的指针变量,也可以定义抽象类的引用。


21.如果在抽象类的派生类中没有重新定义纯虚函数,则该函数在派生类中仍然是纯虚函数,而这个派生类仍然是一个抽象类。


22.抽象类中存在没有具体功能的纯虚函数,所以抽象类不能用作参数类型,函数返回类型等


23.静态多态是在编译阶段完成的,系统在编译就决定了如何事项某一个动作,即调用哪一个函数,也可以在行程EXE文件之前就确定调用的方式。静态多态的优点是运行速度快,执行效率高,缺点是不灵活,程序太直接,太表面。静态多态主要是通过函数重载和运算符重载实现的。


24.动态多态是在运行阶段完成的,系统在运行时才决定运行那个函数,动态多态的优点是灵活,层次高,技术性强,缺点是效率低。动态多态主要是通过虚函数实现的。


25.类型转换通过构造函数和转换函数来实现的。




  

你可能感兴趣的:(c++)