C++定义一个数据类型——类(三)

1.构造函数(二)

构造函数除了有默认形式

class A{
 public:
  A()=default;
};

以外,还有其它形式,如分别用给定初始值初始化。如:

class A{
 public:
  float a;
  int b;
  A(float c): a(c),b(c){}//为空
};

也有其它的,如:

class A{
 public:
  int a;
  A() {}
};

2.union——节省空间的类(一)

union是一种特殊的类。它的成员中每个时刻都只有一个成员是已知的。若一个成员变为已知的,则其它成员变为未知状态。union 默认形式同struct。如:

union A{
//默认公有
 int a;
 string b;
 float c;
};

3.友元

友元可以访问类的任何成员。定义友元以friend 关键字开始。如:

class A{
 friend void who(const string&);
 private:
  string a[5];//who()可访问
  map<string,string>b;//同上
 public:
 //...
 };

如果一整个类作为友元,则可定义为友元类。如:

class A{
public:
 void f();
 void g();
};
class B{
 friend class A;
 //...
};

4.较大的类的拆分——派生类

太大的类,不仅十分繁杂,且有点面向过程的感觉。因此,建议大家拆分成基类(将派生类组合起来)和派生类(实现)或全局函数。
下面是一个例子:

class count_money{
 protected:
  map<string,float> name_price;
  float all(const map<string,float>);
  bool enough(const float&);
 private:
  int time;
  int isbn(){ return time++; }//购买编号
  double minus_price(float&price1){ return 0.8*price1; } //打折
  float much_minus(float&price){ return price-200; }
 public:
  double total;
  float counts();
  void present();
  counts()=default;
  ~counts()=default;
};

这个类较复杂,可以拆分:

class counts_money{
 protected:
  map<string,float> name_price;
  float all(const map<string,float>);
 private:
  int time;
 public:
  int total;
  int isbn(){ return time++; }
}; 
class minus:public counts_money{
 private:
  bool enough(const float&);
 public:
  double minus_price(float&price1){ return 0.8*price1; } //打折
  float much_minus(float&price){ return price-200; }
  float counts();
};
void present(); 

每个类都较简洁。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值