十-----对象和类
- 程序员使用私有成员函数来处理不属于公有接口的实现细节
- 内联函数定义部分加上
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;