实验:
Problem A:
主要就是其中有一个继承
#include<iostream>
using namespace std;
class Base
{
public:
int x_;
Base(int x): x_(x)
{
cout << "Base = "<< x_ << " is created." <<endl;
}
Base(const Base & b)
{
x_ = b.x_;
cout << "Base = " << x_ << " is copied." << endl;
}
~Base()
{
cout << "Base = "<< x_ << " is erased." << endl;
}
};
class Derived:public Base
{
public:
int y_;
Derived(int x, int y): Base(x), y_(y)
{
cout << "Derived = "<< y_ << " is created." << endl;
}
Derived(const Derived & d): Base(d) // 不能传入 Base(d.x_) 与题目要求有关,如果传入d.x_调用的就
//是构造函数,如果,传入b调用的就是拷贝构造函数,因为基类里面含有子类
{
y_ = d.y_;
cout << "Derived = " << y_ << " is copied." << endl;
}
~Derived()
{
cout << "Derived = "<< y_<< " is erased."<< endl;
}
};
int main()
{
int cases, data1, data2;
cin>>cases;
for (int i = 0; i < cases; i++)
{
cin>>data1>>data2;
Base base1(data1), base2(base1);
Derived derived1(data1, data2), derived2(derived1);
}
}
作业:
Problem E 以下代码编译是不通过的,因为用T定义了迭代器,好像不能这么用
template
class DataVector
{
private:
vector mems;
vector::iterator iter;
int N;
};
Problem B 的两种做法:
//很好的运用了sort/ fill函数
#include <iostream>
#include <string>
#include <iomanip>
#include <algorithm>
#include <cmath>
#include <cstring>
using namespace std;
double sum[30];
class Team
{
friend class Contest;
public:
string majority;
double score;
double endrank;
};
bool cmp(Team a,Team b)
{
return a.endrank>b.endrank;
}
class Contest:public Team
{
friend class Team;
public:
Team s[100];
int m;
void Input()
{
int n,p;
cin>>m>>n>>p;
for(int i=0; i<m; i++)
{
fill(sum,sum+m+1,0); // fill填充函数,与memset略有相似,但又不同, fill可以赋任何值
int t;
cin>>s[i].majority;
for(int j=0; j<n; j++)
{
for(int k=0; k<p; k++)
{
cin>>t;
sum[j]+=t;
}
sum[j]=sum[j]*1.0/p;
}
sort(sum,sum+n);
double add=0;
for(int l=1; l<n-1; l++)
add+=sum[l];
s[i].endrank=add*1.0/(n-2); //最后分数。
}
}
void Compute() {}
void Sort() {}
void Show()
{
sort(s,s+m,cmp);
for(int i=0; i<m; i++)
{
cout<<setiosflags(ios::left)<<setw(11)<<s[i].majority<<fixed<<setprecision(2)<<s[i].endrank<<endl;
}
}
};
int main()
{
Contest contest;
contest.Input();
contest.Compute();
contest.Sort();
contest.Show();
return 0;
}
//运用了结构体,方法很通俗很简单的还原了问题的模拟
#include<iostream>
using namespace std;
class Base
{
public:
int x_;
Base(int x): x_(x)
{
cout << "Base = "<< x_ << " is created." <<endl;
}
Base(const Base & b)
{
x_ = b.x_;
cout << "Base = " << x_ << " is copied." << endl;
}
~Base()
{
cout << "Base = "<< x_ << " is erased." << endl;
}
};
class Derived:public Base
{
public:
int y_;
Derived(int x, int y): Base(x), y_(y)
{
cout << "Derived = "<< y_ << " is created." << endl;
}
Derived(const Derived & d): Base(d) // 注意啊, 传入的是这个Derived, 这里面有他老爹!!!
{
y_ = d.y_;
cout << "Derived = " << y_ << " is copied." << endl;
}
~Derived()
{
cout << "Derived = "<< y_<< " is erased."<< endl;
}
};
int main()
{
int cases, data1, data2;
cin>>cases;
for (int i = 0; i < cases; i++)
{
cin>>data1>>data2;
Base base1(data1), base2(base1);
Derived derived1(data1, data2), derived2(derived1);
}
}