第六章 面向对象
2. 面向对象程序语言的主要特征
①抽象(将不同实体抽象成对象) ②封装(数据封装,将每个数据封装在各自的类中,设置访问权限) ③继承(类的继承) ④多态
4. 声明一个类
1 class Human 2 { 3 public: 4 void GetStature(); 5 void GetWeight(); 6 private: 7 int stature; 8 int weight; 9 };
只是声明,并没有开辟空间
5. 命名习惯
①骆驼命名法 ZenSeven ②下划线命名法zen_seven
6. 定义一个对象
类只是个抽象的名词,而对象则是个实际的个体。不要给类赋值!
8. 公有与私有
类的成员函数设置为私有的好处:
①对象不能直接访问,提高了数据的安全性②将数据的赋值与读取分开(一来赋值的接口函数里可以设置数据的接受范围等,二来数据的读取也不会影响数据的赋值。)
10. 内联函数
不用内联函数调用,函数要跳转,用了内联函数就将被调用函数直接复制到调用函数处提高效率(但要是被调用函数代码过大或被调用次数太多就会增加主程序的体积)
① inline(加在函数定义处)
② 类内定义的函数是内联函数(即隐式内联)
在使用内联函数时,应注意如下几点:
1.类内定义的函数是内联函数,类外定义的函数是非内联函数(短函数可以定义在类内,长函数可以定义在类外)。
2.可以为类外定义的函数指定 inline(加在定义处) 关键字,强行为内联函数。
☆3.在内联函数内不允许用循环语句和开关语句。
4.内联函数的定义必须出现在内联函数第一次被调用之前。
具体使用方法:inline是个实现关键字而不是声明关键字,只有将其放在函数定义出才有用!
12. const成员函数
const成员函数(加在函数体前)
能使用就使用
13. 构 造 函 数
A():i(4){} //初始化
A(int x){i=x;} //赋值
(构造函数只在创建对象的时候才会调用,其他情况不允许调用。)
构造函数没有返回类型(构造函数的作用是对类的对象成员进行初始化)
当我们创建了一个构造函数时,系统就不会再为我们提供默认构造函数了。
15. 析构函数
(笼统的说是销毁对象的时候进行调用。但是调用的时间不一定一样,有些时候当退出程序的时候,系统将收回分配的空间,这时就会调用析构函数;有些情况下,在程序进行过程中,使用delete 函数来销毁动态分配的对象,这时就会调用析构函数来释放内存空间。)
析构函数不能有参数不能有返回值且一个类只能有一个析构函数
本章总结:
1 /** 2 构造函数(只有在构造对象时调用)********************************④ 3 析构函数(①对象生命周期结束②delete) 4 */ 5 //1. 命名习惯:①骆驼命名 ②下划线命名 6 //2. inline(当函数代码过大或者被调用次数过多 不宜使用) 7 //① inline 加在函数定义处 8 //② 类内定义的函数是内联函数(即隐式内联) 9 //③ 内联函数内不容许用循环语句和开关语句 10 //3. 构造函数用于构造对象(只有在构造对象时调用)********************************④ 11 // 析构函数用于销毁对象(只有在析构对象时调用)(①对象生命周期结束②delete) 12 //**************************************************************************************************************************** 13 /** 14 显式内联函数 15 */ 16 17 #include<iostream> 18 using namespace std; 19 class A 20 { 21 public: 22 void func(int , int); 23 void print(); 24 private: 25 int i,j; 26 }; 27 int main() 28 { 29 A a; 30 a.func(2,3); 31 a.print(); 32 return 0; 33 } 34 inline void A::func(int x,int y) //inline加在定义处******************① 35 { 36 i=x; 37 j=y; 38 } 39 inline void A::print() 40 { 41 cout<<"两数相乘:"<<i*j<<endl; 42 } 43 44 45 46 /** 47 隐式内联函数 48 */ 49 //#include<iostream> 50 //using namespace std; 51 //class A 52 //{ 53 //public: 54 // void func(int x, int y){i=x,j=y;} 55 // void print(){cout<<"两数相乘:"<<i*j<<endl;} 56 //private: 57 // int i,j; 58 //}; 59 //int main() 60 //{ 61 // A a; 62 // a.func(2,3); 63 // a.print(); 64 // return 0; 65 //} 66 67 //****************************************************************************************************************************