2、类模板与操作符重载

C++类模板(1)
类也可以通过参数泛化,从而构建出一族不同型别的类实例(对象)。
类模板实参可以是牟一星别或常量
C++类模板(2)

const std::size_t DefaultStackSize = 1024;
template<typename T,std::size_t n=DefaultStackSize>class Stack{
public:
	void PUsh(const T const& element);
	int Pop(T& element);
	int Top(T& element) const;
private:
	std::vector<T> m_Membets;
	std::size_t m_nMaxSize = n;
};

C++类模板(3)
类模板的声明
声明类模板与声明函数模板类似
template <typename T,std::size_t n>class Stack{…};
成员函数和变量声明:
void PUsh(const T const& element);
std::vector m_nMaxSize ;
C++类模板(4)
类模板的构造函数中,完整的类型也要写出

template <typename T,std::size_t n>class Stack
{
public:
	...
	Stack(Stack<T,n> const &);
	Stack<T>& operator=(Stack<T,n> const&);//也就是不能只写Stack
	..
};

C++类模板(5)
类模板的实现
。。。。
C++类模板(8)
使用类模板
Stack stack;
Stack<int,100>stack;
注:在强制转换类型中,static_cast就是一个函数模板
static_cast(int a = 10);//其中的float就相当于T。
vector a(10);
C++类模板(9)
类模板特化
在这里插入图片描述
二、C++操作符重载(1)
关键字operator定义了一种特殊的函数,其实也就是
两个数相加函数为add(a,b);通过操作符重载+号,有了 a+b;就更方便,本质来说,operator+也函数功能是一样的,就是更方便。
C++操作符重载(2)
重载就是已经有的,所以不能定义一种新的操作符

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Set模板类是一种集合,它可以存储一组不同的元素,并且它们是按照某种规则排列的。可以通过重载+、-、<<和>>操作符来实现Set模板类。在这里,我们需要定义一个模板类Set,这个类可以接受任意类型的元素作为其成员。 在定义Set类时,需要实现如下操作: 1. 实现一个构造函数,用于初始化Set对象; 2. 实现一个析构函数,用于销毁Set对象; 3. 重载+、-操作符,分别用于向Set对象添加元素和从Set对象删除元素; 4. 重载<<和>>操作符,分别用于输出和输入Set对象的元素。 下面是一个简单的Set类的代码示例: ```cpp #include <iostream> #include <set> using namespace std; template<typename T> class Set { public: Set() {} virtual ~Set() {} void add(const T& elem) { m_data.insert(elem); } void remove(const T& elem) { m_data.erase(elem); } friend Set operator+(const Set& s1, const Set& s2) { Set s = s1; for (auto it = s2.m_data.begin(); it != s2.m_data.end(); ++it) { s.add(*it); } return s; } friend Set operator-(const Set& s1, const Set& s2) { Set s = s1; for (auto it = s2.m_data.begin(); it != s2.m_data.end(); ++it) { s.remove(*it); } return s; } friend ostream& operator<<(ostream& os, const Set& s) { os << "{ "; for (auto it = s.m_data.begin(); it != s.m_data.end(); ++it) { os << *it << " "; } os << "}"; return os; } friend istream& operator>>(istream& is, Set& s) { T elem; while (is >> elem) { s.add(elem); } return is; } private: set<T> m_data; }; ``` 使用示例: ```cpp int main() { Set<int> s1, s2; s1.add(1); s1.add(2); s1.add(3); s2.add(2); s2.add(3); s2.add(4); Set<int> s3 = s1 + s2; // 并集 Set<int> s4 = s1 - s2; // 差集 cout << "s1: " << s1 << endl; cout << "s2: " << s2 << endl; cout << "s1 + s2: " << s3 << endl; cout << "s1 - s2: " << s4 << endl; cin >> s1; // 输入集合元素 cout << "s1: " << s1 << endl; return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值