C++期末重点复习笔记

1.运算符重载

   运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据时导致不同的行为
   类属关系运算符"."、成员指针运算符".*"、作用域分辨符"::"、三目运算符"?:"都不可以重载。
   重载形式有两种:类的非静态成员函数、非成员函数。
   语法类型:
   类的成员函数:
   返回类型 类名::operator 运算符(形参表)
   {
       函数体
      }
    非成员函数:
   返回类型 类名::operator 运算符(形参表)
   {
       函数体
      }

返回类型就是运算结果类型,运算符就是要重载的运算符名称。

2.继承(对代码跟数据的重复使用)

  类的继承,是新的类从已有类那里得到已有的特征。

公有继承

    公有继承时,基类的公有和保护成员的访问属性在派生类中不变,而基类的私有成员不可直接访问

私有继承

    基类的公有成员和保护成员都以私有成员身份出现在派生类中,而基类的私有成员在派生类中不可直接访问。

保护继承

   基类的公有和保护成员都以保护成员的身份出现在派生类中,而基类的私有成员不可直接访问。

3.派生(原有程序无法解决,对代码进行改造)(主要是实现代码的重用和扩充)

声明语法:
   class 派生类名:继承方式  基类名1....
     {
      派生类成员声明;
      };

继承方式规定了如何访问从基类继承的成员。
派生类成员是除了从基类继承来的所以成员外,新增加的数据和函数成员。

4.虚函数

虚函数是动态绑定的基础。虚函数必须是非静态的成员函数。

虚函数声明语法:

virtual 函数类型 函数名(形参表)
虚函数声明只能出现在类定义的函数原型声明中

运行中的多态需要满足三个条件
1.类之间满足赋值兼容规则。
1)类都属于一个类族
2)都是公有派生
2.声明虚函数
3.由成员函数来调用或者是通过指针、引用来访问虚函数

5.类

声明语法:
class 类名称
{
   public:
      外部接口
   protected:
      保护型成员(性质与私有成员相似)
   private:
       私有成员(只能被本类的成员函数访问,来自类外部的任何访问都是非法的)
};

6.构造函数

构造函数的作用就是在对象被创建时利用特定的值构造对象,将对象初始化为一个特定的状态。

一般会定义一个与类同名的成员函数

默认构造函数:

调用时无须提供参数的构造函数

复制构造函数:

具有一般构造函数的所以特性,其形参是本类的对象引用。其作用是使用一个已经存在的对象(由复制构造函数的参数指定),去初始化同类的一个新对象。
隐含的复制构造函数功能:把初始值对象的每个数据成员的值都复制到新建立的对象中。

声明语法
class 类名
{public:
	类名(形参表);
	类名(类名&对象名)
	...
};
类名::类名(类名&对象名);
{			函数体
}

7.函数重载

两个以上的函数,函数名相同,但形参个数或类型不同,编译器根据实参和形参的类型及个数的最佳匹配,自动确定调用哪一个函数

eg:
int add(int x,int y);
int add(int x,int y,int z);

int add(int x,int y);
float add(float x, float y);

8.处理字符串(类)

用字符数组存储和处理字符串

字符串常量是用一对双引号括起来的字符序列
eg:“abcd”
它在内存中存放的形式是,按串中字符的排列次序顺序存放,每个字符占1字符,并在末尾添加’\0’作为结束标记。

实际上是一个隐含创建类型为char的数组。

一个字符串常量就表示这样一个数组的首地址。
因此可以把字符串常量赋给字符串指针,由于常量值是不能改的,所以应将字符串常量赋给指向常量的指针。

eg:
const char *STRING="This is a string.";
string类处理字符串

string类提供了对字符串进行处理所需要的操作。
!!使用string类需要包含头文件 string

string类的构造函数

string();  默认构造函数,建立一个长度为0的串
string(const string &rhs); 复制构造函数
string(const string &rhs,unsigned int pos,unsigned int n);  将对象rhs 
中的串从位置pos开始取n个字符,用来初始化string类的对象!!串中第一个字符的
长度为0.
string(const char *s,unsigned int n);  用指针s所指向的字符串中的前n个字符
初始化string类的对象
string(unsgined int n,char c);  将参数c中的字符重复n次,用来初始化string类的对象

可以使用字符串常量对string对象初始化

string str="Hello world!";
string类的操作符

string类提供了丰富的操作符,可以方便地完成字符串复制、连接、比较等功能。

之所以能用上面的操作符来操作string对象,是因为string类对这些操作符进行了重载。

1.如果s1与s2长度相同,且所有字符完全相同,则s1=s2
2.如果s1与s2所有字符不完全相同,则比较第一对不相同字符的ASCII码,较小字符所在串为较小的串
3.如果s1的长度n1小于s2的长度n2,且两字符串的前n1个字符完全相同,则s1<s2.

9.类的友元

友元关系提供了不同类或对象的成员函数之间、类的成员函数与一般函数之间进行数据共享的机制。
在一个类中,可以利用关键字friend 将其他函数或类声明为友元。
如果友元是一般函数或类的成员函数,称为友元函数;
如果友元是一个类,则称为友元类,友元类的所以成员函数都自动成为友元函数

友元函数

友元函数是在类中用关键字friend修饰非成员函数。
虽然不是本类的成员函数,但它在函数体中科院通过对象名访问类的私有和保护成员。

eg:friend float dist(Point &p1,point &p2);
使用了Point类组合构成的Line类计算线段长度。
计算两点两点距离用普通函数dist,但是要访问Point类的私有数据成员x和y,为此
将dist声明为Point类的友元函数

友元类

若A类为B类的友元类,则A类的所有成员函数都是B类的友元函数,都可以访问B类的私有和保护成员。

声明语法
class B
{
    ...
    friend class A;   声明A为B的友元类
    ...
};

!!注意
1.友元关系不能传递。B类是A类的友元,C类是B类的友元,C类和A类之间,如果没有声明就没有任何关系,不能进行数据共享。
2.友元关系是单向的。如果声明B类是A类的友元,B类的成员函数就可以访问A类的私有和保护,但A不可以访问B的私有和保护。

10.常对象

常成员函数

使用const 关键字修饰的函数为常成员函数(对应数据不能改变)

声明语法
类型说明符 函数名(参数表)const;
eg:void print()const;
常数据成员

像一般数据一样,类的成员数据也可以是常量,使用const说明的数据成员为常数据成员

eg:const int a;

与函数不同,数据const加在前面,函数的const加在后面。

11.内联函数

  当函数成员代码简单,需要频繁调用,可以将其定义为内联函数。
  声明分为(隐式和显式声明)
声明语法:
eg:inline void Clock::showTime(){
     cout<<hour<<":"<<minute<<":"<<second<<endl;}
   类定义中不加入showTime的函数体

12.模板

所谓参数化多态性,就是将程序所处理的对象类型参数化,使得一段程序可以用于处理多种不同类型的对象。

函数模板

声明语法
template<模板参数表>
类型名 函数名(参数表)
{
         函数体的定义
}

模板参数表由用逗号分隔的模板参数构成,可以包括以下内容:
1.class(或typename)标识符,指明可以接受一个类型参数。这些类型参数代表的是类型,可以是预定义类型或自定义类型。
2.类型说明符 标识符,指明可以接受一个由“类型说明符”所规定类型的常量作为参数
3.template<参数表>class 标识符,指明可以接收一个类模板名作为参数。

eg:template<typename T>
    T  abs(T x){
    			return x<0?-x:x;
    			}

在上述例子中,主函数调用abs()时,编译器从实参的类型推导出函数模板类型参数。
对于调用表达式abs(n),由于实参n为int类型,所以推导出模板中类型参数T为int
当类型参数的含义确定后,编译器将以函数模板为样板,生成一个函数,这一过程称为函数模板的实例化。

类模板

使用类模板使用户可以为类定义一种模式,使得类中的某些数据成员、某些成员函数的参数、返回值或局部变量能取不同类型。 (包括系统预定义和用户自定义的)
由于类模板需要一种或多种类型参数,所以类模板也常常称为参数化类。

声明语法
eg:template<模板参数表>
    class 类名
    {
    	类成员声明
    }   

类成员声明的方法与普通类的定义几乎相同,只是在它的各个成员(数据成员和函数成员)中通常要用到模板的类型参数T。

如果需要 从类模板以外定义其成员函数:

声明语法
template<模板参数表>
类型名 类名<模板参数标识符列表>::函数名(参数表)

使用一个模板类来建立对象时,应按:

 模板名<模板参数表>  对象名1,...  ,对象名n;
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值