1.C艹+语言的面向对象特征 1.对象模型:多态 2)类属:模板函数 Template(class T> T add(T num1, T num2)( return num1+num2 模板是C++支持参数化多态 b void maino 的工具,使用模板可以使用 int il.i2 float f1. f 户为类或者函数声明一种 uble cout<<"请输入两个整数:" 般模式,使得类中的某些数 cin>i1>>i2 cout<<i1+12="<<add(i1, 12)<endl 据成员或者成员函数的参数 cout<请输入两个单精度浮点数:" cin>>f1>>f2 返回值取得任意类型。 cout<<"f1+f2="(<add(f1, f2)<<endl cout<请输入两个双精度浮点数:" cin>>d1>>d2 cout<<"d1+d2="<<add(d1, d2)<endl
1. C++语言的面向对象特征 1. 对象模型:多态 – (2) 类属:模板函数 模板是C++支持参数化多态 的工具,使用模板可以使用 户为类或者函数声明一种一 般模式,使得类中的某些数 据成员或者成员函数的参数 、返回值取得任意类型
1.C艹+语言的面向对象特征 1.对象模型:多态 3)重载:同名函数 白 class A{ ubli void ShowMessage) void ShowMessage(string str) 有两个或多个函数名相同 Bvoid A:: ShowllessageO( 的函数,但是函数的形参 cout<"Hi, This is A.n return 列表不同。在调用相同函 Bvoid A: Showmessage(string str)[ 数名的函数时,根据形参 cout<<str<endl retur 列表确定到底该调用哪 个函数。 白 int maino{ meIm meSsage O mem. ShowMessage( Hello. How are you?\n") return 0
1. C++语言的面向对象特征 1. 对象模型:多态 – (3) 重载:同名函数 有两个或多个函数名相同 的函数,但是函数的形参 列表不同。在调用相同函 数名的函数时,根据形参 列表确定到底该调用哪一 个函数
1.C艹+语言的面向对象特征 2.其他问题 )是不是追求“纯粹”的面向对象语言? C++语言不是“纯粹”的面向对象语言; )main函数不在任何类里面; 2)基本的数据类型不是对象; 3)友元会破坏封装性; 4)支持独立的函数,数据,即过程化编程;
1. C++语言的面向对象特征 2. 其他问题 – (1) 是不是追求“纯粹”的面向对象语言? – C++语言不是“纯粹”的面向对象语言; – 1) main函数不在任何类里面; – 2) 基本的数据类型不是对象; – 3) 友元会破坏封装性; – 4) 支持独立的函数,数据,即过程化编程;
1.C艹+语言的面向对象特征 2.其他问题 (2)变量的语义模型:釆用值模型还是引用模型? 在变量的值模型中,值保存在变量的存储区里; 而在变量的引用模型中,变量的值需要用另一个值 对象表示,变量的存储区里存放的是对值对象的引 用 C艹+采用的是值模型,可以创建静态对象或栈对象; 但只有通过对象引用或指向对象的指针才能实现面 向对象的动态约束行为
1. C++语言的面向对象特征 2. 其他问题 – (2) 变量的语义模型:采用值模型还是引用模型? – 在变量的值模型中,值保存在变量的存储区里; – 而在变量的引用模型中,变量的值需要用另一个值 对象表示,变量的存储区里存放的是对值对象的引 用; – C++ 采用的是值模型,可以创建静态对象或栈对象; – 但只有通过对象引用或指向对象的指针才能实现面 向对象的动态约束行为
1.C艹+语言的面向对象特征 2.其他问题 (3)是否允许静态对象或者堆栈对象(自动对象)? C++支持静态对象和自动对象; 静态对象:变量定义在函数外或是用 static关键字 修饰的变量存放在静态存储区。放在静态存储区 的数据在整个程序运行期间持续有效。 自动对象:C+默认局部变量的生命期局限于所 在函数的每次执行期间。只有当定义它的函数被Q 调用时才存在的对象成为自动对象。自动对象在 每次调用函数时创建和撤销
1. C++语言的面向对象特征 2. 其他问题 – (3) 是否允许静态对象或者堆栈对象(自动对象)? – C++ 支持静态对象和自动对象; – 静态对象:变量定义在函数外或是用static关键字 修饰的变量存放在静态存储区。放在静态存储区 的数据在整个程序运行期间持续有效。 – 自动对象:C++默认局部变量的生命期局限于所 在函数的每次执行期间。只有当定义它的函数被 调用时才存在的对象成为自动对象。自动对象在 每次调用函数时创建和撤销