C++复习笔记

基于对象的程序设计
面向对象程序设计有4个主要特点: 抽象、封装、继承和多态性
class 类名
{
    private:
    私有的数据和成员函数;
    public:
    共有的而数据和成员函数;
}
member access specifier: private, public, protected
一个C++程序是由3个部分组成的:
(1)类声明文件(后缀为.h)
(2)类实现文件(后缀为.cpp)
(3)类的使用文件(后缀为.cpp),即主函数文件
用参数初始化表对数据成员初始化
例:Box::Box(int h, int w, int len):height(h),width(w),length(len){}

析构函数(destructor)
当对象的生命期结束时,会自动执行析构函数。具体地说如果出现以下4种情况,程序就会执行析构函数:
(1)如果在一个函数中定义了一个对象(假设是自动局部对象),当这个函数被调用结束时,对象应该释放,在对象释放前自动执行析构函数。
(2)静态(static)局部对象在函数调用结束时对象并不释放,因此也不调用析构函数,只在main函数结束或调用exit函数结束程序时,才调用static局部对象的析构函数。
(3)如果定义了一个全局的对象,则在程序的流程离开其作用域时(如main函数结束或调用exit函数)时,调用该全局的对象的析构函数。
(4)如果用new运算符动态地建立了一个对象,当用delete运算符释放该对象时,先调用该对象的析构函数。

每个成员函数中都包含一个特殊的指针,这个指针的名字是固定的,称为this。它是指向本类对象的指针,它的值是当前被调用的成员函数所在的对象的起始地址。

常对象
1.常数据成员
只能通过构造函数的参数初始化表对常数据成员进行初始化,任何其他函数都不能对常数据成员赋值。
2.常成员函数
如果将成员函数声明为常成员函数,则只能引用本类中的数据成员,而不能修改它们。

1.指向对象的常指针
例:Time * const ptrl;
2.指向常对象的指针
例 :const char * ptrl;
(1)如果一个变量已被声明为常变量,只能用指向常变量的指针变量指向它,而不能用一般的指针变量去指向它。
(2)指向常变量的指针变量除了可以指向常变量外,还可以指向未被声明为const的变量去指向它。
(3)如果函数的形参是指向普通变量的指针变量,实参只能用指向普通(非const)变量的指针,而不能用指向const变量的指针,这样,在执行函数的过程中可以改编形参指针变量所指向的变量的值。

和静态数据成员一样,静态成员函数是类的一部分,而不是对象的一部分。如果要在类外调用公用的静态成员函数,要用类名和域运算符。

友元
1.友元函数
如果在本类以外的其他地方定义了一个函数(这个函数可以是不属于任何类的非成员函数,也可以是其他类的成员函数),在类体中用friend对其进行声明,此函数就称为本类的友元函数。
2.友元类
将B类声明为A类的友元类,那么友元类B中的所有函数都是A类的友元函数,可以访问A类中的所有成员。

类模板
例:
template <class numtype>
class Compare
{
    public :
         Compare( numtype a, numtype b) 
         {
              x=a;
              y=b;
         }
        numtype max()
        {
           return(x>y)?x:y;
        }
    private:
        numtype x,y;
};

运算符重载
重载运算符的函数一般格式如下
函数类型 operator 运算符名称(形参表)
    {对运算符的重载处理}
重载运算符的规则
(1)C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载
(2)C+允许重载的运算符
(3)重载不能改变运算符运算对象(即操作数)的个数
(4)重载不能改变运算符的优先级别
(5)重载不能改变运算符的结合性
(6)重载运算符的函数不能有默认的参数、
(7)重载的运算符必须和用户定义的自定义类型的对象一起使用,其参数至少一个是类对象(或类对象的引用)
(8)用于类对象的运算符一般必须重载,但有两个例外,运算符“=”和“&”不必用户重载

重载流插入运算符“<<”和流提取运算符“<<”
istream & operator >>(istream &, 自定义类 &)
ostream & operator <<(ostream &, 自定义类 &)

类型转换函数
类型转换函数的一般形式
operator 类型名()
  {实现转换的语句}

面向对象的程序设计

继承与派生
一个派生类只从一个基类派生,这成为单继承(single inheritance)
一个派生类有两个或者多个基类的称为多重继承(multiple inheritance)

派生类是基类的具体化,而基类是派生类的抽象

派生类成员的访问属性
1.公用继承(public inheritance)
基类的公有成员和保护成员在派生类中保持着原有访问属性,其私有成员仍为基类私有
2.私有继承(private inheritance)
基类的共有成员和保护成员在派生类中成了私有成员。其私有成员仍为基类私有。
3.受保护的继承(protected inheritance)
基类的公有成员和保护成员在派生类中成了保护成员,其私有成员仍为基类私有。
保护成员的意思是:不能被外界引用,但是可以被派生类的成员引用。

派生类构造函数一般形式为
派生类构造函数名(总参数表):基类构造函数名(参数表)
    {派生类中新增数据成员初始化语句}

虚基类(virtual base class)
C++提供虚基类的方法,使得在继承简介共同基类时只保留一份成员
在最后的派生类中不仅要负责对其直接基类进行初始化,还要负责对虚基类初始化

多态性与虚函数
多态性: 向不同的对象发送同一个消息,不同的对象在接受时会产生不同的行为。
在C++中,多态性表现形式之一是:具有不同功能的函数可以用一个函数名,这样就可以实现用一个函数名调用不同内容的函数。

虚函数:所谓虚函数,就是在基类声明函数是虚拟的,并不是实际存在的函数,然后在派生类中才正式定义此类函数

纯虚函数与抽象类
virtual 函数类型 函数名(参数列表)=0;



猜你喜欢

转载自blog.csdn.net/weixin_30104533/article/details/80550298
今日推荐