第10章——对象和类

 

l         面向对象编程强调的是程序如何表示数据。使用OOP方法解决编程问题的第一步是根据它与程序之间的接口来描述数据,从而指定如何使用数据。然后,设计一个类来实现该接口。一般来说,私有数据成员存储信息,公有成员函数(又称为方法)提供访问数据的唯一途径。类将数据和方法组合成一个单元,其私有性实现数据隐藏。

 

通常类声明分成两部分组成,这两部分通常保存在不同的文件中。类声明(包括由函数原型表示的方法)应放在头文件中。定义成员函数的源代码放在方法文件中。这样便将接口描述与实现细节分开了。从理论上说,只需知道公有接口就可以使用类。

 

类是用户定义的类型,对象是类的实例。这意味着对象是这种类型的变量。C++试图让用户定义的类型与标准类型相似,因此可以声明对象、指向对象的指针和对象数组。可以按值传递对象、按对象作为函数返回值、将一个对象赋给同类型的另一个对象。如果提供了构造函数,则在创建对象时,可以初始化对象。如果提供了析构函数,则在对象消亡后,程序将执行该函数。

 

每个对象都存储自己的数据,而共享类方法。如果mr_object是对象名,try_me()是成员函数,则可以使用成员操作符句点调用成员函数:mr_object.try_me().在opp中,这种函数调用被称为将try_me消息发送给mr_object对象。在try_me()方法中引用类数据成员时,将使用mr_object对象相应的数据成员。

 

如果希望成员函数对多个对象进行操作,可以将额外的对象作为参数传递给它。如果方法需要显式地引用调用它的对象,则可以使用this指针。由于this指针被设置为调用对象的地址,因此*this是该对象的别名。

l         所创建的每个新对象都有自己的存储空间,用于存储其内部变量和类成员;但同一个类的所有对象共享同一组类方法。

 

使用构造函数

显式调用:stock food=stock(“world cabbage”,250,1.25)

隐式调用:stock garment(“furry mason”,50,2.5);

上式与下面的显式调用等效:stock garment=stock(“furry mason”,50,2.5);

和new一起使用:stock *pstock=new stock(“electroshock games”,18,19.0);

当且仅当没有定义任何构造函数时,编译器都会提供默认构造函数。为类定义了构造函数后,程序员就必须为它提供默认构造函数。不过,如果要创建对象,而不显式地初始化,则必须定义一个不接受任何参数的默认构造函数。定义默认构造函数的方法有两种。一种是给已有构造函数的所有参数提供默认值:

stock(const char *co=”error”,int n=0,double pr=0.0);

另一种方式是通过函数重载来定义另一个构造函数——一个没有参数的构造函数:

stock();

 

一般来说,包含类声明的头文件和包含方法定义的源代码文件的文件名相同。

 

如果既可以通过初始化,也可以通过赋值来设置对象的值,则应采用初始方式。通常这各占方法的效率更高。

如果函数不会修改调用对象,则应在函数括号后面加入关键字const

eg:void show()const;

 

创建一个所有对象共享的常量

方法一:在类声明中声明一个枚举

class stock

{

private:

       enum{len=30};

       char company(len);

       …

}

方法二:使用static

class stock

{

private:

       static const int len=30;

       char company[len];

       …

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值