OOP特性:
类规范有两个部分组成
//stock00.h
#ifndef STOCK00_H_
#define STOCKOO_H_
#include <string>
class Stock
{
private://可选 默认为private
std::string company;
long shares;
double share_val;
double total_val;
void set_tot(){total_val=shares*share_val;}
// 定义位于类声明中的函数都将自动成为内联函数
public:
Stock();
Stock(const std::string & co,double pr=0.
0);
~Stock();
void acquire(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();
}
//set_tot()另一种写法:在类声明之外定义成员函数,并使其成为内联函数
inline void Stock::set_tot()
{
total_val=shares*share_val;
}
#endif
无论类成员是数据成员还是成员函数,都可以在类的共有部分或私有部分中声明它
所创建的每个新对象都有自己的存储空间,用于存储其内部变量和类成员;但同一个类的所有对象共享同一组类方法,即每种方法只有一个副本。
访问控制
::来标识函数所属的类void Stock::update(double price)
{
share_val=price;
set_tot();
}
会在每次创建类的新对象时执行,构造函数的名称与类名完全相同。
//声明
Stock(const string & co,double pr);
//定义
Stock::Stock(const string & co,double pr)
{
company=co;//参数名不可以和成员名相同
share_val=pr;
set_tot();
}
//使用
Stock food=Stock("World",1.25);
//或
Stock food("World",2.5);
通常应提供所有类成员做隐式初始化的默认构造函数。
对象过期时,程序将调用一个特殊的成员函数,称为析构函数。~Stock();
在下述情况析构函数将被调用
保证函数不会修改调用对象
//原型
void show() const;
//定义
void Stock::show() const{...}
this指针指向用来调用成员函数的对象(this被作为隐藏参数传递给方法);
const Stock & Stock::topval(const Stock & s) const
{
if(s.total_val>total_val)
return s;
else
return *this;//this是对象的地址,*this是对象本身
}
class Bakery
{
private:
const int Months=12;//Fails
//方式一
enum {Months=12};
//方式二 该常量将与其他静态变量存储在一起,而不是存储在对象中
static const int Months=12;
}
//egg Small和t_shirt Small位于相同的作用域内,它们将发生冲突
enum egg{Small,Medium,Large,Jumno};
enum t_shirt{Small,Medium,Large,Xlarge};
C++提供一种新枚举,其枚举量的作用域为类
enum class egg{Small,Medium,Large,Jumno}; //可以使用struct代替class
enum class t_shirt{Small,Medium,Large,Xlarge};
//需要使用枚举名来限定枚举量
egg choice=egg::Large;
t_shirt Floyd=t_shirt::Large;
//作用域内枚举不能隐式地转换为整型
int ring=Floyd;// not allowed
//显示类型转换
int ring=int(t_shirt::Large);
C++作用域内枚举的底层类型为int
//:short指定底层类型为short
enum class : short pizza{Small,Medium};
ADT以通用的方式描述数据类型,而没有引入语言或实现细节