C++ primer 十三 C++中的类(二)

实现类成员函数

        还需要创建类描述的第二部分:为那些由类声明中的原型表示的成员函数提供代码。成员函数定义与常规函数定义非常相似,它们有函数头和函数体,也可以有返回类型和参数。但是它们还有两个特殊的特征:

•定义成员函数时,使用作用域解析运算符(::)来标识函数所属的类;

•类方法可以L方问类的private组件。

        首先,成员函数的函数头使用作用域运算符解(::)來指出函数所属的类。例如,Update()成员函数的函数头如下:

void Stock::update{doubte price)

        这种表示法意味着我们定义的updatc()函数是Stock类的成员。这不仅将updatc()标识为成员函数, 还意味着我们可以将另一个类的成员函数也命名为updatc()。例如,Buffoon()类的update( )函数的函数头如卜.

void Buffoori: :update()

        因此,作用域解析运算符确定了方法定义对应的类的身份。我们说,标示符update()具有类作用域(class scope)。Stock类的其他成员函数不必使用作用域解析运算符,就可以使用update()方法,这是因为他们属于同一个类,因此update()是可见的。然而,在类声明和方法定义之外使用update()时,需要采取特殊的措施。

方法的第二各特点是,方法可以访问类的私有成员。例如,show()方法可以使用这样的代码:

std::cout<<"company:"<<company
<<" shares:"<<shares<<'\n'<<"shate price:$"<<shate_val;

了解这两点就可以实现类方法了:

stock00.cpp文件:

#include<iostream>
#include"stock00.h"
Stock::Stock()
{
std::cout<<"default constructor called\n\n";
shares=0;
company="no name";
share_val=0.0;
total_val=0.0;
}
Stock::Stock(const std::string &co,long n,double pr)
{
std::cout<<"constructor using "<<co<<" called\n\n";
company=co;
if(n<0)
{
std::cout<<"Number of shares can't be negative;"
        <<company<<" shares set to 0.\n";
        shares=0;
}
else
shares=n;
share_val=pr;
set_tot();
}
Stock::~Stock()
{
std::cout<<"Bye "<<company<<"!\n";
}
void Stock::acquire(const std::string &co,long n,double pr)
{
company=co;
if(n<0)
{
std::cout<<"Number of shares can't be negative;"
        <<company<<" shares set to 0.\n";
        shares=0;
}
else 
shares=n;
share_val=pr;
set_tot();
}
void Stock::buy(long num,double price)
{
if(num<0)
{
std::cout<<"Number of shares purch can't be negative"
<<"transaction is aborted.\n";

}
else 
{
shares+=num;
share_val=price;
set_tot();
}
}
void Stock::sell(long num,double price)
{
using std::cout;
if(num<0)
{
cout<<"Number of shares purch can't be negative"
<<"transaction is aborted.\n";
}
else if(num>shares)
{
cout<<"you can't sell more than you have!"
<<"transaction is aborted.\n";
}
else
{
shares-=num;
share_val=price;
set_tot();
}
}
void Stock::update(double price)
{
share_val=price;
set_tot();
}
void Stock::show()
{
using std::cout;
using std::ios_base;
ios_base::fmtflags orig=cout.setf(ios_base::fixed,ios_base::floatfield);
std::streamsize prec=cout.precision(3);
std::cout<<"company:"<<company
<<" shares:"<<shares<<'\n';

std::cout<<" share price:$"<<share_val;
cout.precision(2);
cout<<" total worth:$"<<total_val<<"\n\n";
cout.setf(orig,ios_base::floatfield);
cout.precision(prec);
}

成员函数说明;

        acquire()函数管理对某个公司股票的首次购买,而buy()和sell()管理增加或减少持有的股票。方法 buy()和sell()确保买入或卖出的时股数不为负。另外,如果用户试图卖出超过他持有的股数量,则sell( )函数将结朿这次交易。这种使数据私有并限于对公有函数访问的技术允许我们能够控制数据如何被使用: 在这个例子中,它允许我们加入这些安全防护措施,避免不造当的交易。

方法使用哪个对象

       下面介绍使用对象时最审要的一个方而:如何将类方法应用于对象。下面的代码使用了一个对象的shares()成员:

shares+=num;

首先来看看如何创建对象,最简单的方式是声明类变量:

stock kate,joe;

这将创建两个Stock类对象,一个为kate,另一个为joe。

接下来,肴肴如何使用对象的成员函数。和使用结构成员一样,通过成员运算符:

kate.show();// the kate. object calls the member function

Joe.show(); // the joe object calls the member function

        第1条语句调用kate对象的show()成员。意味着show()方法将把shares解释为kate.shares,将 share_vla解释为kate.share_val。函数调用joe.show()使show()方法将shares和share_val分別解释为 joe.share 和joe,share_val

使用类

usestock0.cpp文件:

#include<iostream>
#include"stock00.h"
#include<string>
int main()
{
Stock fluffy_the_cat;
fluffy_the_cat.acquire("nanosmart",0,0);
fluffy_the_cat.show();
fluffy_the_cat.buy(15,18.125);
fluffy_the_cat.show();
fluffy_the_cat.sell(400,20.00);
fluffy_the_cat.show();
fluffy_the_cat.buy(300000,40.125);
fluffy_the_cat.show();
fluffy_the_cat.sell(300000,0.125);
fluffy_the_cat.show();
return 0;
}

运行结果:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值