十-----对象和类
十—–对象和类
- 程序员使用私有成员函数来处理不属于公有接口的实现细节
- 内联函数定义部分加上 inline,声明部分不需要
- 在OOP中,调用成员函数被称为发送消息 “send message”
- 自定义构造函数的参数名不能与类成员名相同,为了使得参数名更直观,通常在数据成员名前加前缀m_,或者加后缀_,以避免混乱
- 没有定义构造函数时,编译器会自动提供默认构造函数;但是一旦定义了非默认构造函数,就必须再手动定义一个默认构造函数
-
默认构造函数有两种定义方法,一种是无参,另一种是有参,但所有参数都有默认值。通常,不管有无参数,都应该用默认值初始化所有的参数。即无参的默认构造函数也应该在函数体内赋予数据成员默认值。两种定义方法不能同时使用
//构造函数隐式与显示调用 class food = class( "Ok",30,4.76 ); class food( "Ok",30,4.76 ); class *ptr = new class( "Ok",30,4.76 ); //默认构造函数隐式与显示调用 class good; class good = class( ); class *pre = new class;
- 析构函数无参
- 如果构造函数使用了new,析构函数必须调用delete
-
只要类方法不修改调用对象,就应该申明为const
void show( ) const;
-
this指针
const Stock & Stock :: topval ( const Stock & s ) const { if (s.total_val > total_val) return s; else return *this; } //第一个const表示返回类型为const引用 //第二个const表示函数不能修改显示调用的对象 //第三个const表示函数不能修改隐式调用的对象
-
对象数组
const int STKS = 3; Stock food [STKS] = { Stock("NanoSmart", 12, 20.0), Stock( ), Stock("Monolithic Obelisks", 130, 3.25), }; //访问 food[0], food[1], food[2]
-
要使用作用域为类的常量,即常量由所有对象共享。
直接在数据成员中定义const变量是不可行的,此时并没有实例化
有两种方法,一:枚举; 二:static静态数据类型private: enum{ ok = 100 }; private: static const int ok = 100;