C++教程(六)——多态性与虚函数
什么是多态性向不同的对象发生同一消息,不同的对象在接收时会产生不同的行为。也就是说,每个对象可以用自己的方式去响应共同的消息。所谓消息,就是调用函数,不同的行为就是指不同的实现,即执行不同的函数。
利用虚函数实现动态多态性虚函数的作用虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。
静态关联与动态关联静态关联:函数重载和通过对象名调用的虚函数,在编译时即可确定其调用的虚函数属于哪一类,其过程称为静态关联,也称为早期关联。函数重载属于静态关联。
动态关联:在运行阶段把虚函数和类对象绑定在一起的过程称为动态关联,这种多态性是动态的多态性,即运行阶段的多态性。
纯虚函数与抽象类纯虚函数纯虚函数是在声明虚函数时被“初始化”为0的函数。一般形式:
1virtual 函数类型 函数名(参数表列)=0;
纯虚函数没有函数体最后的“=0”并不表示函数的返回值是0,它只起形式上的作用,告诉编译系统“这是纯虚函数”这是一个声明语句,最后应加上“;”
抽象类不用来定义对象而只作为一种基本类型用作继承的类,称为抽象类,通常称为抽象基类。凡是包含纯 ...
C++教程(五)——继承和派生
派生类的声明方式一般形式:
123class 派生类名:[继承方式] 基类名{ 派生类新增加的成员};
继承方式包括:public(公有的),private(私有的),protected(受保护的),若不写此项,则默认为private(私有的)
派生类的构成构造一个派生类包括以下3部分工作:
从基类接收成员
调整从基类接收的成员
在声明派生类是增加的成员
派生类是抽象基类的具体实现
派生类成员的访问属性公有继承采用公有继承方式时,基类的公有成员和保护成员在派生类中任然保持其公有成员和保护成员的属性,而基类的私有成员在派生类中并没有成员派生类的私有成员,它任然是基类的私有成员,只能通过基类的成员函数才能调用它,而不能被派生类的成员函数所引用。
私有继承私有基类的公有成员和保护成员在派生类中的访问属性相当于派生类中的私有成员,即派生类的成员函数能访问它们,而派生类外不能访问它们。私有基类的私有成员在派生类中成为不可访问的成员,只有基类的成员函数才能引用它们。
保护成员和保护继承保护基类的公有成员和保护成员在派生类中都成为了保护成员,其私有成员任为基类私有,也就是把基 ...
C++教程(四)——对运算符进行重载
运算符重载的方法运算符重载的方法是定义一个重载运算符的函数,使指定的运算符不仅能实现原有的功能,而且能实现在函数中指定的新的功能。运算符重载实质上是函数的重载。
函数重载的一般格式:
123函数类型 operator 运算符名称(形参表){ 对运算符的重载处理}
使用例:(将 + 用于complex类的加法运算)
1complex operator + (complex& c1,complex& c2);
重载运算符的规则
C++不允许用户之间定义新的运算符,只能对已有的C++运算符进行重载。
*C++中的“ . ”,“ * ”,“ :: ”,“ sizeof ”,“ ?: ”运算符不能重载*
重载不能改变运算符运算对象(即操作数)的个数
重载不能改变运算符的优先级别
重载不能改变运算符的结合性
重载运算符的函数不能有默认的参数
重载的运算符必须和用户定义的自定义类型的对象一起使用,其参数至少应有一个是类对象(或类对象的引用)
用于类对象的运算符一般必须重载,但有两个例外,运算符“=”和“&”不必用户重载
从理论上说,可以将一个运算符重 ...
C++教程(三)——如何使用类和对象
构造函数对类的对象进行初始化用构造函数实现数据成员的初始化构造函数是一种特殊的成员函数,与其他成员函数不同,不需要用户的调用,而是建立对象时自动执行。例:
1234567891011121314151617181920212223242526272829303132333435#include<iostream>using namespace std;class Time{ public: Time(){ //定义构造成员函数,函数名与类名相同 hour=0; //利用构造函数对对象中的数据成员赋初值 minute=0; sec=0; } void set-time(); void show-time(); private: int hour; int minute; int sec;};void Time::set-time(){ cin>>hour; cin>>minute; cin>>sec;}void Time::show-time() ...
C++教程(二)——类与对象的特性
类的声明和对象的定义类和对象的关系在C++中对象的类型称为类。类是对象的抽象,而对象是类的具体实例。类是抽象的,不占内存,而对象是具体的,占用存储空间。
声明类的类型一般形式:
123456{ private: 私有的数据和成员函数; public: 公用的数据和成员函数;}
定义对象的方法一般形式:
1class 类名 对象名;
类的成员函数类的成员函数是函数的一种,它可以被指定为private(私有的),public(公用的),protected(保护的)。一般的做法是将需要被外界调用的成员函数指定为public,它们是类的对外接口,而为本类中的成员函数所调用的,就指定为private。
对象成员的引用在程序中经常需要访问对象中的成员。访问对象中的成员函数有以下三种方法:
通过对象名和成员运算符访问对象中的成员
通过指向对象的指针访问对象中的成员
通过对象的引用访问对象中的成员通过对象名和成员运算符访问对象中的成员
访问对象成员的一般形式:
1对象名.成员名
使用例:
12345class A{ void show(); }A.sho ...
C++教程(一)——初步认识C++
输入输出C语言的输入与输出函数是scanf和printf函数,而C++增加了标准输入输出流cin和cout,使用它们需声明iostream头文件。使用例:cout:
12int a=1,b=2;cout<<"a="<<a<<"b="<<b<<endl;
cin:
12int c;cin>>c;
函数重载C语言中规定同一作用域中不能有相同名字的函数,但C++允许在同一作用域中用同一函数名定义多个函数,这些函数的参数个数和参数类型不相同,这些同名的函数可以分布实现不同的功能,这就是函数的重载,即一个函数名多用。例:
1234567891011121314151617int max(int a,int b,int c){ if(b>a) a=b; if(c>a) a=c; return a;}float max(float a,float b,float c){ if(b>a) a=b; if(c>a) a=c; return ...