作者 | 梁唐
大家好,我是梁唐。
这是EasyC++系列的第57篇,类的实现。
当我们完成了类定义之后, 还需要来实现类当中的函数。
比如我们在stock00.h
当中定义了一个类:
#ifndef STOCK00_H_
#define STOCK00_H_
#include <string>
class Stock {
private:
std::string company;
long shares;
double share_val;
double total_val;
void set_tot() {total_val = shares * share_val;}
public:
void accquire(const std::string &co, long n, double pr);
void buy(long num, double price);
void sell(long num, double price);
void update(double price);
void show();
};
#endif
在这个定义当中,我们只是声明了函数,并没有具体实现函数的逻辑。
我们通常会在同名的cpp文件当中实现,实现的时候,需要使用作用域解析运算符来表示函数所属的类:
void Stock::update(double price) {
...
}
这样就表明了update
函数所属Stock
这个类,这也就意味着我们可以创建属于其他类的同名函数:
void Buffoon::update() {
...
}
其次,我们在成员函数当中,可以访问private
限定的成员变量。比如说在show
函数当中,我们可以这样实现:
void Stock::show() {
std::cout << company << shares << share_val << total_val << endl;
}
虽然company
,shares
都是类的私有成员,但在成员方法当中,一样可以正常访问。
再次,我们在成员方法当中调用另外一个成员方法,可以不需要解析运算符。比如我们要在show
函数内调用update
函数,直接使用update()
即可,而无需前面的Stock::
。
我们再回过头来看一下Stock
这个类的定义,在类的定义当中,有一个叫做set_tot
的函数。我们直接在类当中实现了逻辑。虽然同样是成员函数,但是在类当中直接实现的函数是有所区别的。在类声明当中实现的函数,会被视为是内联函数。
一般我们会把一些比较简短的函数在类的声明当中直接实现,当然我们也可以使用关键字inline
,手动指定某个函数是内联的。
class Stock {
private:
void set_tot();
public:
...
};
inline void Stock::set_tot() {
total_val = shares * share_val;
}