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();
每个类都较简洁。