第一题;
结果应为
Constructor called
Copy constructor called
Constructor called
Constructor called
Constructor called
Constructor called
Copy constructor called
Copy constructor called
Constructor called
Copy constructor called
#include <iostream>
using namespace std;
class Fraction {
//数据成员,访问控制属性默认是私有
int m_Numerator = 0; // 分子默认为0; C++11
int m_Denominator = 1; //分母默认为1;
public://公有成员函数
Fraction(int above = 0, int below = 1) :
m_Numerator(above), m_Denominator(below) {
cout << "Constructor called" << endl;
}
Fraction(const Fraction& rhs) : m_Numerator(rhs.m_Numerator), \
m_Denominator(rhs.m_Denominator) {
cout << "Copy constructor called" << endl;
}
//显示定义析构函数
~Fraction() {
cout << "Fraction的析构函数的调用" << endl;
}
//分子
int getnumerator()
const {
return m_Numerator;
}
//获取分母
int getdenominator()
const {
return m_Denominator;
}
//实现约分
void reduce();
Fraction operator/(Fraction b) {
Fraction yuefen(m_Numerator * b.getdenominator(), m_Denominator * b.getnumerator());
yuefen.reduce();
return yuefen;
}//运用operator/
public:
int gcd(int i, int j) //得出最大公约数
{
int x = j;
while (i % j != 0)
{
x = i % j;
}
while (i = j) {
x = i;
}
return x;
}
};
void Fraction::reduce() {
int n = gcd(m_Numerator, m_Denominator);//获取分子分母的最大公约数
m_Numerator /= n;
m_Denominator /= n;
}
Fraction tongfen(Fraction a, Fraction b) {
Fraction tongfen1(a.getnumerator() * b.getdenominator() + a.getdenominator() * b.getnumerator(), a.getdenominator() * b.getdenominator());
tongfen1.reduce();
return tongfen1;
}
Fraction divide1(const Fraction& divident, const Fraction& divisor) {
return Fraction(divident.getnumerator() * divisor.getdenominator(), \
divident.getdenominator() * divisor.getnumerator());
}
Fraction divide2(Fraction divident, Fraction divisor) {
Fraction result(divident.getnumerator() * divisor.getdenominator(), \
divident.getdenominator() * divisor.getnumerator());
return result;
}
int main() {
Fraction a;
Fraction b(a);
Fraction c = Fraction(3, 2);
Fraction d1(2, 3), d2(4, 5);
Fraction e1 = divide1(d1, d2);
Fraction e2 = divide2(d1, d2);
system("pause");
return 0;
}
第二题
#include<iostream>
#include<vector>
using namespace std;
int a[5] = { 19,67,24,11,17 }, b[5] = { 2,3,9,17,59 };
int pos1, pos2,temp;
int key;
int fun1(int i) {
for (i = 0; i <= 5; i++) {
if (a[i] == 17) {
pos1 = i + 1;
break;
}
}
return pos1;
};
int fun2(int x, int low, int high) {
while (low <= high) {
pos2 = (low + high) / 2;
if (b[pos2]>17)
high = pos2 - 1;
else if (b[pos2]<17)
low = pos2 + 1;
else if ( b[pos2]==17) {
return pos2 + 1;
}
}
if (low > high)
return -1;
}
int main() {
int i = 0, n = 0, low, high;
pos1 = fun1(i);
pos2 = fun2(b[5], 1, 5);
cout << pos1 << endl;
cout << pos2 << endl;
vector <int> vi;
for (int x = 0; x <= 5; x++) {
for (int y = 2; y < b[x]; y++) {
if (b[x] % y == 0) {
if (y = b[x] - 1) {
vi.push_back(b[x]);
}
}
}
}
for (int x = 0; x <= 5; x++) {
for (int y = 2; y < a[x]; y++) {
if (a[x] % y != 0) {
if (y = a[x] - 1) {
vi.push_back(a[x]);
}
else continue;
}
}
}
for (int i = 10; i > 0; i--) {
if (vi[i] < vi[i - 1]) {
temp = vi[i];
vi[i] = vi[i - 1];
vi[i - 1] = temp;
}
else
continue;
}
for (int i = 0; i <= 10; i++)
cout << vi[i] << "\t";
return 0;
}
第三题
结果
Constructor of Point
Copy constructor of Point
Constructor of Circle
Destructor of Point
end
Destructor of Circle
Destructor of Point
流程:先执行point函数,再执行circle函数
#include <iostream>
#include <cmath>
using namespace std;
class Point {
double m_x = 0, m_y = 0;
public:
Point(double x = 0, double y = 0) : m_x(x), m_y(y) {
cout << "Constructor of Point" << endl;
}
Point(const Point& p) :m_x(p.m_x), m_y(p.m_y) {
cout << "Copy constructor of Point" << endl;
}
~Point() {
cout << "Destructor of Point" << endl;
}
double getX()
{
return m_x;
}
double getY()
{
return m_y;
}
public:
friend double changdu(const Point& a, const Point& b);
};
double changdu(const Point& a, const Point& b) {
double i = sqrt(a.m_x * a.m_x + a.m_y * a.m_y);
return i;
}
class Circle {
Point m_center; double m_radius = 1.0;
public:
Circle(double r = 1, const Point& p = Point()) :m_center(p), m_radius(r) {
cout << "Constructor of Circle" << endl;
}
~Circle() {
cout << "Destructor of Circle" << endl;
}
double zhouchang()
{
const double PI = 3.14;
double w = 2 * PI * m_radius;
return w;
}
double mianji()
{
const double PI = 3.14;
double q = PI * m_radius * m_radius;
return q;
}
};
int main()
{
Circle a(2, Point(1, 1));
cout << "end" << endl;
Point e(2, 3);
Point m(4, 2);
cout << "圆的横坐标" << e.getX() <<endl;
cout << "圆的纵坐标" << m.getY() << endl;
cout << "两点间的距离" << changdu(e,m) << endl;
Circle r(3, e);
cout << "圆的面积:" << r.mianji() << endl;
cout << "圆的周长:" << r.zhouchang() << endl;
return 0;
}
坐标,距离,面积,周长分别通过四个函数实现