C++编程-类的综合练习

就像鲁班在成为木匠祖师之前也是经过不断练习的。

……
老师傅提出第三个问题:“两个徒弟学成了手艺下山去,师傅送给他们每人一把斧子。大徒弟用斧子挣下了一座金山,二徒弟用斧子在人们心裏刻下了一个名字。你愿意跟哪个徒弟学”鲁班马上回答:“愿意跟第二个学。”老师傅听了哈哈大笑。
老师傅说:“好吧,你都答对了,我就得把你收下。可是向我学艺,就得使用我的家伙。可这家伙,我已经五百年没使唤了,你拿去修理修理吧。”
鲁班把木箱裏的家伙拿出来一看,斧子崩了口子,刨子长满了,凿子又弯又秃,都该拾掇拾掇了。他挽起袖子就在磨刀石上磨起来。他白天磨,晚上磨,磨得膀子都酸了,磨得两手起了血泡,又高又厚的磨刀石,磨得像一道弯弯的月牙。一直磨了七天七夜,斧子磨快了,刨子磨光了,凿子也磨出刃来了,一件件都闪闪发亮 。他一件一件送给老师傅看,老师傅看了不住地点头。
老师傅说:“试试你磨的这把斧子,你去把门前那棵大树砍倒。那棵大树已经长了五百年了。”
鲁班提斧子走到大树下。这棵大树可真粗,几个人都抱不过来;抬头一望,快要顶到天了。他抡起斧子不停地砍,足足砍了十二个白天十二个黑夜,才把这棵大树砍倒。
鲁班提斧子进屋去见师傅。老师傅又说:“试试你磨的这把刨子,你先用斧子把这棵大树砍成一根大柁,再用刨子把它刨光;要光得不留一根毛刺儿,圆得像十五的月亮。”
鲁班转过身,拿斧子和刨子来到门前。他一斧又一斧地砍去了大树的枝,一刨又一刨地刨平了树干上的节疤,足足干了十二个白天十二个黑夜,才把那根大柁刨得又圆又光。
鲁班拿斧子和刨子进屋去见师傅。老师傅又说:“试试你磨的这把凿子,你在大柁上凿两千四百个眼儿:六百个方的,六百个圆的,六百个楞的,六百个扁的。”
鲁班拿起凿子和斧子,来到大柁旁边就凿起来。他凿了一个眼儿又凿一个眼儿,只见一阵阵木屑乱飞。足足凿了十二个白天十二个黑夜,两千四百个眼儿都凿好了:六百个方的,六百个圆的,六百个楞的,六百个扁的。
鲁班带凿子和斧子去见师傅。老师傅笑了,他夸奖鲁班说:“好孩子,我一定把全套手艺都教给你!”说完就把鲁班领到西屋。原来西屋裏摆好多模型,有楼有阁有桥有塔,有桌有椅有箱有柜,各式各样,精致极了,鲁班把眼睛都看花了。老师傅笑说:“你把这些模型拆下来再安上,每个模型都要拆一遍,安一遍,自己专心学,手艺就学好了。”
老师傅说完就走出去了。鲁班拿起这一件,看看那一件,一件也舍不得放下。他把模型一件件擎在手里,翻过来掉过去地看,每一件都认真拆三遍安三遍。每天饭也顾不得吃,觉也顾不得睡。老师傅早上来看他,他在琢磨;晚上来看他,他还在琢磨。老师傅催他睡觉,他随口答应,可是不放下手裏的模型。
鲁班苦学了三年,把所有的手艺都学会了。老师傅还要试试他,把模型全部毁掉,让他重新造。他凭记忆,一件一件都造得跟原来的一模一样。老师傅又提出好多新模型让他造。他一边琢磨一边做,结果都按师傅说的式样做出来了。老师傅非常满意。
……

平时工作中用不到c++里的许多特性和语法,导致在接手别人的项目时总是磕磕绊绊,所以在此我想写一个工程囊括绝大多数特性来对自己的c++水平来个提升。

这是看到了一个挺全的总结……
C++学习大纲
还一个工程UML。

这是我大学期间一门课上老师开卷试卷上的代码,后来偷偷照下来打了出来。里面有关类的知识考察较为犀利,放出来。

#include <iostream>
using namespace std;

//Y类开始=================================================
class Y {
    
    
public:
	Y();
	Y(int j);
	Y(const Y&);
	Y& operator = (const Y&);
	virtual ~Y();
	virtual int GetValue() = 0;
	static unsigned NY() {
    
     return nY; }
private:
	int j;
	static unsigned nY;
};

unsigned Y::nY = 0;
Y::Y() {
    
    
	cout << "default constructor of Y " << endl;
	j = 0;
	++nY;
}

Y::Y(int j) {
    
    
	cout << "regular constructor of Y" << endl;
	this->j = j;
	++nY;
}

Y::Y(const Y& y) {
    
    
	cout << "copy constructor of Y " << endl;
	j = y.j;
	++nY;
}

Y& Y::operator=(const Y& y) {
    
    
	cout << "assignment operator of Y" << endl;
	j = y.j;
	return *this;
}

Y::~Y() {
    
     cout << "destructon of Y" << endl; }

//X类,继承Y类=============================================
class X : public Y {
    
    
public:
	X();
	X(int i);
	X(const X&);
	X& operator=(const X&);
	~X();
	virtual int GetValue() {
    
     return k; }
	static unsigned NX() {
    
     return nX; }
private:
	int k;
	static unsigned nX;
};

unsigned X::nX = 0;
X::X() {
    
    
	cout << "default constructor of X" << endl;
	k = 0;
	++nX;
}

X::X(int i) :Y(i) {
    
    
	cout << "regular constructor of X" << endl;
	k = i;
	++nX;
}

X::X(const X& x) {
    
    
	cout << "copy constructor of X" << endl;
	k = x.k;
	++nX;
}

X& X::operator=(const X& x) {
    
    
	cout << "assignment operaton of X" << endl;
	k = x.k;
	return *this;
}

X::~X() {
    
     cout << "destructor of x" << endl; }

X userCode(X b)
{
    
    
	X c = b;
	return c;
}

//main函数开始==================================================
int main() {
    
    
	cout << "Beginning: Y::NY()=" << Y::NY() << endl;
	cout << "Beginning: X::NX()=" << X::NX() << endl;
	X a(3);
	cout << "calling userCode()" << endl;
	X d;
	d = userCode(a);
	cout << "back to main()" << endl;
	cout << "d.GetValue()" << d.GetValue() << endl;

	Y*e = new X(7);
	cout << "e->GetValue()=" << e->GetValue() << endl;
	cout << "before deleting e Y::NY() = " << Y::NY() << endl;
	cout << "before deleting e X::NX() = " << X::NX() << endl;
	delete e;
	cout << "before ending: Y::NY()" << Y::NY() << endl;
	cout << "before ending: X::NX()" << X::NX() << endl;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/sinat_27382047/article/details/102641855