实验9 c++
problem :A 第一个类
#include <iostream>
#include <iomanip>
#include <cstring>
#include <cmath>
using namespace std;
class Thing
{
private:
string name;
public:
Thing(){}
Thing(string n):name(n) {cout << "" << name << endl;}
~Thing(){ cout << "Destroy a thing" << " " << name << endl;}
};
int main()
{
Thing A("Car");
string str;
cin>>str;
Thing B(str);
return 0;
}
problem b:建造一间教室
description:
一间教室包括很多物品。这里只考虑灯(Light)和椅子(Chair)。定义Light类,只有一个int类型的参数,表示灯的瓦数;定义Chair类,只有一个字符串类型的参数,表示椅子的颜色。定义ClassRoom类,包括四个属性:两个int类型的属性,分别为灯的个数和椅子的个数。一个Light类的对象和一个Chair类的对象,分别为教室中灯的种类和椅子的种类。
input:
输入有6行,第1行是一个正整数,表示灯的瓦数。第2行是一个不含空白符的字符串,表示椅子的颜色。第3、4行表示教室中灯的个数和椅子的数量。第5行是一个正整数,表示教室中灯的瓦数,第6行是一个不含空白符的字符串,表示教室中椅子的颜色。
sample input:
20
blue
16
100
25
red
sample output:
代码示例:
1 #include <iostream>
2 #include <iomanip>
3 #include <cstring>
4 #include <cmath>
5 using namespace std;
6 class Light
7 {
8 private:
9 int w;
10 public:
11 Light(){ }
12 Light(int ww):w(ww){ cout << "A " << w << "w light is created." << endl; }
13 ~Light(){ cout << "A " << w << "w light is erased." << endl;}
14 int getw() const { return w; }
15 };
16 class Chair
17 {
18 private:
19 string cl;
20 public:
21 Chair(){ }
22 Chair(string c):cl(c){ cout << "A " << cl << " chair is created." << endl; }
23 ~Chair(){ cout << "A " << cl << " chair is created." << endl;}
24 string getcl() const { return cl; }
25 };
26
27 class ClassRoom
28 {
29 private:
30 int lnum, cnum;
31 Light lig;
32 Chair cha;
33 public:
34 ClassRoom(){ }
35 ClassRoom(int ln,int cn,int w,string c ): lig(w), cha(c),lnum(ln), cnum(cn)
36 {
37 cout << "A classroom having " << lnum << " lights and " << cnum << " chairs is created." << endl;
38 }
39 ~ClassRoom(){ cout << "A classroom having " << lnum << " lights and " << cnum << " chairs is erased." << endl;}
40 };
41
42 int main()
43 {
44 int nl, nc;
45 int w;
46 string color;
47 cin>>w>>color;
48 Light light(w);
49 Chair chair(color);
50 cin>>nl>>nc;
51 cin>>w>>color;
52 ClassRoom room(nl, nc, w, color);
53 return 0;
54 }
problem c: 是否回文数?
description :
定义Data类,有一个int类型的属性。定义其构造函数、setValue函数和isPalindrome函数,其中setValue函数用于设置属性值,isPalindrome用于判断该属性值是否为回文数。判断回文数时,不考虑数的符号。
输入:
若干个int类型范围内的整数
输出:
每个输入对应一行输出,如果对应的输入是回文数,则输出Yes,否则输出No。
代码演绎:
1 #include <iostream> 2 #include <iomanip> 3 #include <cstring> 4 #include <cmath> 5 using namespace std; 6 class Data 7 { 8 private: 9 int data; 10 public: 11 Data(int d = 0) : data(d) { } 12 ~Data(){ } 13 public: 14 void setValue(int v) { data = v; } 15 bool isPalindrome() const 16 { 17 int temp; 18 temp = data; 19 if(data < 0 ) temp = -temp; 20 int tt[100]; 21 int i = 0; 22 while(temp != 0) 23 { 24 tt[i] = temp % 10; 25 temp /= 10; 26 i++; 27 } 28 for(int j = 0, k = i-1; j < i;j++,k-- ) 29 if(tt[j] != tt[k]) 30 return false; 31 return true; 32 } 33 }; 34 int main() 35 { 36 Data data; 37 int v; 38 while (cin>>v) 39 { 40 data.setValue(v); 41 if (data.isPalindrome()) 42 cout<<"Yes"<<endl; 43 else 44 cout<<"No"<<endl; 45 } 46 return 0; 47 }
problem d:Base 与 Derived
description:
定义Base和Derived类,Derived类是Base类的子类,两个类都只有1个int类型的属性。定义它们的构造函数和析构函数,输出信息如样例所示。
input;
输入2个整数。
output:
见样例
代码样例:
1 #include <iostream>
2 #include <iomanip>
3 #include <cstring>
4 #include <cmath>
5 using namespace std;
6 class Base
7 {
8 private:
9 int bs;
10 public:
11 Base(int b = 0):bs(b) { cout << "Base " << bs << " is created." << endl; }
12 ~Base() { cout << "Base " << bs << " is created." << endl;}
13 };
14 class Derived:public Base
15 {
16 private:
17 int de;
18 public:
19 Derived(int x, int y):Base(x),de(y) { cout << "Derived " << de << " is created." << endl; }
20 ~Derived(){ cout << "Derived " << de << " is created." << endl; }
21 };
22 int main()
23 {
24 int a, b;
25 cin>>a>>b;
26 Base base(a);
27 Derived derived(a, b);
28 return 0;
29 }
problem e: 类模板sample
description:
定义类模板Sample,设模板参数为T,则Sample类只有一个T类型的属性。定义其构造函数、拷贝构造函数,输出与样例类似的信息。定义show函数,用于显示属性值(只输出属性值)。定义add函数,将当前对象与Sample类的另一个对象的属性值相加,和仍存入当前对象。
input:
输入2个int类型整数、2个double类型实数。
代码示例:
1 #include <iostream>
2 #include <iomanip>
3 #include <cstring>
4 #include <cmath>
5 using namespace std;
6 template <class T>
7 class Sample
8 {
9 private:
10 T t;
11 public:
12 Sample(T tt) : t(tt){ cout << "Sample " << t << " is created." << endl; }
13 Sample(const Sample & s):t(s.t) { cout << "Sample " << t << " is copied." << endl;}
14 ~Sample() { }
15 public:
16 void show()const{ cout << t << endl; }
17 void add(Sample s){ t += s.t; }
18 };
19
20
21 int main()
22 {
23 int a, b;
24 double c, d;
25 cin>>a>>b>>c>>d;
26 Sample<int> s1(a), s2(b), s3(s1);
27 Sample<double> s4(c), s5(d), s6(s5);
28 s1.add(s2);
29 s1.show();
30 s5.add(s4);
31 s5.show();
32 return 0;
33 }