Essential C++ 笔记 - 第四章基于对象的编程风格

本文深入探讨了C++中的类与迭代器概念,详细介绍了TriangularClass和Triangular_IteratorClass的设计与实现,包括成员初始化、迭代器操作、构造函数特性以及运算符重载等关键知识点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Essential C++ 笔记 - 第四章基于对象的编程风格

C++类的知识点
一、实现Triangular Class及对应的Triangular_Iterator Class

class Triangular_iterator {
public:
	Triangular_iterator(int index) : _index(index - 1) {}
	bool operator==(const Triangular_iterator& ) const;
	bool operator!=(const Triangular_iterator& ) const;
	int operator*() const;
	Triangular_iterator& operator++(); 		// 前置版
	Triangular_iterator& operator++(int); 	// 后置版
private:
	void check_integrity() const;

	int _index;
};

inline bool Triangular_iterator::operator==(const Triangular_iterator& rhs) const {
	return _index == rhs._index;
}

inline bool Triangular_iterator::operator!=(const Triangular_iterator& rhs) const {
	return _index != rhs._index;
}

inline bool Triangular_iterator::operator*() const {
	check_integrity();
	return Triangular::_elems[_index];
}

// 前置++:先加一,然后放入寄存器
// 后置++:先放入寄存器,后加一
inline Triangular_iterator& Triangular_iterator::operator++() {
	++_index;
	check_integrity();
	return *this;
}
inline Triangular_iterator& Triangular_iterator::operator++(int) {
	Triangular_iterator tmp = *this;
	++_index;
	check_integrity();
	return tmp;
}

inline void Triangular_iterator::check_integrity() const {
	if (_index >= Triangular::_max_elems) {
		throw exception("iterator overflow");
	}
	if (_index >= Triangular::_elems.size() ) {
		Triangular::gen_elements(_index + 1);
	}
}
class Triangular {
public:
	// 一组重载的constructors
	Triangular(); // default constructor
	Triangular(const Triangular& rhs); // copy constructor
	Triangular(int len, int begin_pos, int next);

	Triangular& operator=(const Triangular& rhs);
	void gen_elements(int length);

	// destructor
	~Triangular();

	typedef Triangular_iterator iterator;

	Triangular_iterator begin() const {
		return Triangular_iterator(_begin_pos);
	}
	
	Triangular_iterator end() const {
		return Triangular_iterator(_begin_pos+_length);
	}	

	friend int Triangular_iterator::operator*();
	friend void Triangular_iterator::check_integrity();
	
private:
	int _length;
	int _begin_pos;
	int _next;	
	static vector<int> _elems;
};

// Memberwise Initialization
Triangular::Triangular() {
	_length = 1;
	_begin_pos = 1;
	_next = 0;
}
// Member Initialization
Triangular::Triangular(int len, int begin_pos, int next) : _length(len), _begin_pos(begin_pos), _next(next) {
}

// copy constructor
Triangular::Triangular(const Triangular& rhs) : _length(rhs._length), _begin_pos(rhs._begin_pos), _next(rhs._next){

}

// copy assignment operator
Triangular& Triangular::opertor=(const Triangular& rhs) {
	_length = rhs._length;
	_begin_pos = rhs._begin_pos;
	_next = rhs._next;

	return *this;
}

void Triangular::gen_elements(int length) {
	if (length < 0 || length > _max_elems) {
		// 发送错误信息,然后return
	}
	if (_elems.size() < length) {
		int ix = _elems.size() ? _elems.size()+1 : 1;
		
		for (; ix <= length; ++ix) {
			_elems.push_back(ix*(ix+1)/2);
		}
	}
}

c++构造函数不能是虚函数:
vptr指针指向虚函数表,执行虚函数的时候,会调用vptr指针指向的虚函数的地址。
当定义一个对象的时候,首先会分配对象内存空间,然后调用构造函数来初始化对象。vptr变量是在构造函数中进行初始化的。又因为执行虚函数需要通过vptr指针来调用。如果可以定义构造函数为虚函数,那么就会陷入先有鸡还是先有蛋的循环讨论中。

基类的析构函数必须是虚函数:
BaseClass *base = new BaseClass(); 当我们执行 delete base时,会调用析构函数为我们释放资源。
BaseClass *sub = new SubClass(); 如果BaseClass基类的析构函数不是虚函数的时候,当我们执行delete sub时,只会释放BaseClass 基类申请的资源,而不是释放SubClass派生类的资源。

成员列表初始化:
Member Initialization

二、将iostream运算符重载

ostream& operator<<(ostream& os, const Triangular& rhs) {
	os << "( " << rhs._begin_pos() << ", " << rhs.length() << " )"; 
	
	return os;
}

istream& operator>>(istream& is, Triangular& rhs) {
	int bp, len;
	
	is >> bp >> len;
	
	rhs._begin_pos(bp);
	rhs._length(len);	

	return is;
}
内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值