C++学习笔记07

本文探讨了C++中is-a关系和has-a关系的实现,通过公有继承实现接口继承,私有继承或包含实现成分关系。以Pair类为例,展示了如何创建一个模板类来存储两个不同类型的数据。同时,展示了Wine类如何利用Pair模板类,通过私有继承实现has-a关系,以及如何在Wine类中访问Pair成员。内容涉及模板成员函数的定义和使用,以及类的构造函数和成员函数。
摘要由CSDN通过智能技术生成

is-a关系使用公有继承
has-a关系使用私有继承或者包含。

template<class T1,class T2>
class Pair {
private:
	T1 a;
	T2 b;
public:
	T1& first();
	T2& second();
	T1 first()const { return a; }
	T2 second()const { return b;}
	Pair(const T1&aval,const T2&bval):a(aval),b(bval){}
	Pair() {};

};
typedef Pair< Arrayint, Arrayint>PairArray;
template<class T1,class T2>

class wine :private PairArray
{
private:
	string name;
	int yrs;
public:
	wine();
	wine(const char* l, int y, const int yr[], const int bot[]);
	wine(const char* l, int y);
	void Getbottles();
	void show();
	string& Label();
	int sum();
};

类名为Pair< Arrayint, Arrayint>,在定义类时只用写Pair.

template<class T1,class T2>
T1& Pair< T1,  T2>::first()
{
	return a;
}
template<class T1,class T2>
T2& Pair< T1,  T2>::second()
{
	return b;
}

模板成员函数的每个函数头将以相同的模板声明打头。
first有两种类型,一种返回引用,一种返回复制值。
pair类为wine类的私有成员,不能直接访问:
当Wine类与pair类为包含关系时:PairArray::first()[i];(包含将对象作为一个命名的成员)
当Wine类与pair类为私有继承时:PR.first()[i];(PR为Wine中的Pair类实例化名称)(私有继承将对象作为一个未命名的成员)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值