实验一 类与对象

实验任务1

#include<iostream>
#include<string>
#include<vector>

int main()
{
	using namespace std;
	string s1;
	string s2{"c plus plus"};
	string s3{s2};
	string s4=s2;

	s1="oop";

	vector<string>v1;
	v1.push_back(s1);
	v1.push_back(s2+"1");
	v1.push_back(s3+"2");
	v1.push_back(s4+"3");
	cout<<"output1:"<<endl;
	for(auto item:v1)
		cout<<item<<endl;
	cout<<"output2:";
	for(auto p=v1.begin();p!=v1.end();++p)
		cout<<*p<<endl;
	cout<<"output3:"<<endl;
	for(auto i=0;i<v1.size();++i)
		cout<<v1[i]<<endl;

	vector<string>v2{v1.rbegin(),v1.rend()};
	cout<<"v2:"<<endl;
	for(auto item:v2)
		cout<<item<<endl;
}


实验任务2

#include<iostream>
using  namespace std;

class Point {
public:
	Point(int x0 = 0, int y0 = 0);
	Point(const Point& p);
	~Point() = default;

	int get_x() const { return x; }
	int get_y() const { return y; }
	void show() const;

private:
	int x, y;
};

Point::Point(int x0, int y0) :x{ x0 }, y{ y0 } {
	cout << "constructor called." << endl;
}

Point::Point(const Point& p) :x{ p.x }, y{ p.y } {
	cout << "copy constructor called." << endl;
}
void Point::show() const { 
	cout << "(" << x << ", " << y << ")" << endl; 
}
int main() {
	Point p1(12, 18); 
	p1.show(); Point p2 = p1;  
	p2.show(); Point p3{p2}; 
	p3.show(); cout << p3.get_x() << endl; 
}


实验任务3

#include <iostream>
#include <iomanip>
using std::cout;
using std::endl;

class Clock {
public:
	 Clock(int h = 0, int m = 0, int s = 0);
	 Clock(const Clock & t);
	 ~Clock() = default;
	 void set_time(int h, int m = 0, int s = 0);
	void show_time() const;
private:
	 int hour, minute, second;
};
Clock::Clock(int h, int m, int s) : hour{ h }, minute{ m }, second{ s } {
	 cout << "constructor called" << endl;
}
Clock::Clock(const Clock& t) : hour{ t.hour }, minute{ t.minute },
second{ t.second } {
	 cout << "copy constructor called" << endl;
}
void Clock::set_time(int h, int m, int s) {
	hour = h;
	minute = m;
	second = s;
}
void Clock::show_time() const {
	using std::setw;
	using std::setfill;
	cout << setfill('0') << setw(2) << hour << ":"
		<< setw(2) << minute << ":"
		<< setw(2) << second << endl;
}
Clock reset() {
	return Clock(0, 0, 0); 
}
int main()
{
	Clock c1(15, 20, 5); 
		c1.show_time();
	c1 = reset();
		c1.show_time();
	Clock c2(c1); 
		c2.set_time(6);
	c2.show_time();
}


实验任务4

#include <iostream>

class X {
public:
	X(); 
	~X(); 
	X(int m); 
	X(const X & obj);
	X(X && obj) noexcept; 
void show() const; 
private:
	int data;
};
X::X() : data{ 42 } {
	std::cout << "default constructor called.\n";
}
X::~X() {
	std::cout << "destructor called.\n";
}
X::X(int m) : data{ m } {
	std::cout << "constructor called.\n";
}
X::X(const X& obj) : data{ obj.data } {
	std::cout << "copy constructor called.\n";
}
X::X(X&& obj) noexcept : data{ obj.data } {
	std::cout << "move constructor called.\n";
}
void X::show() const {
	std::cout << data << std::endl;
}
int main() {
	X x1; 
		x1.show();
	X x2{ 2049 };
	x2.show(); 
		X x3{ x1 }; 
		x3.show();
	X x4{ std::move(x2) };
		x4.show();
}


x1.show();
调用默认构造函数;
x2.show();
调用构造函数;
X x3{ x1 };
调用复制构造函数;
X x4{ std::move(x2) };
调用移动构造函数


实验任务5

#include <iostream>
#include <iomanip>
class Rectangle {
public:
	Rectangle();
	Rectangle(double length, double width);
	Rectangle(Rectangle& rect);
	~Rectangle();


	double len() const { return length; }
	double wide() const { return width; }
	double area() const { return width * length; }
	double circumference() const { return (length + width) * 2; }
	void resize(double times);
	void resize(double length_times, double width_times);

private:
	double length, width;

};


Rectangle::Rectangle() :length{ 2.0 }, width{ 2.0 } {}
Rectangle::Rectangle(double l, double w) : length{ l }, width{ w } {}
Rectangle::Rectangle(Rectangle& rect) : length{ rect.length }, width{ rect.width } {}
Rectangle::~Rectangle() {}

void Rectangle::resize(double times)
{
	length = length * times;
	width = width * times;
}
void Rectangle::resize(double length_times, double width_times)
{
	length = length * length_times;
	width = width * width_times;
}





void output(const Rectangle& rect) {
	using namespace std;
	cout << "矩形信息: \n";
	cout << fixed << setprecision(2);
	cout << setw(3) << "长度为:" << rect.len() << endl;
	cout << setw(3) << "宽度为:" << rect.wide() << endl;
	cout << setw(3) << "周长为:" << rect.circumference() << endl;
	cout << setw(3) << "面积为: " << rect.area() << endl;
};
int main() {
	Rectangle rect1;
	output(rect1);
	Rectangle rect2(10, 5);
	output(rect2);
	Rectangle rect3(rect1);
	rect3.resize(2);
	output(rect3);
	rect3.resize(5, 2);
	output(rect3);
}

posted @ 2022-10-05 12:36  Cali-AKA  阅读(22)  评论(0)    收藏  举报