实验1 类和对象
//Point类 //相较于教材,在构造函数的写法上,采用了业界更通用的初始化列表方式 #include<iostream> using std::cout; using std::endl; //定义Point类 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::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(4,5); //构造函数被调用 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(12,0,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,x2,x3,x4时构造函数被调用
x1调用
X::X() :data{ 42 } {
std::cout << "default constructor called.\n";
}
x2调用
X::X(int m) :data{m} {
std::cout << "constructor called.\n";
}
x3调用
X::X(const X& obj) :data{ obj.data } {
std::cout << "copy constructor called.\n";
}
x4调用
X::X(X&& obj) noexcept:data{obj.data} {
std::cout<<"move constructor called.\n";
}
程序结束后析构函数被调用,x1,x2,x3,x4的空间依次被释放
实验任务5
#include<iostream> #include<iomanip> class Rectangle { public: Rectangle(double l=2.0,double w=1.0); Rectangle(const Rectangle& obj); ~Rectangle()=default; double len() const {return length;} double wide() const{ return width;} double area() const { return length*width;} double circumference() const {return 2*(length+width);} void resize(int times); void resize(int l_times,int w_times); private: double length,width; }; Rectangle::Rectangle(double l,double w){ length=l; width=w; } Rectangle::Rectangle(const Rectangle& obj){ length=obj.length; width=obj.width; } void output(const Rectangle &rect){ using namespace std; cout<<"矩形信息:\n"; cout<<fixed<<setprecision(2); cout<<left<<setw(8)<<"长:" <<rect.len()<<endl <<setw(8)<<"宽:"<<rect.wide()<<endl <<setw(8)<<"面积:"<<rect.area()<<endl <<setw(8)<<"周长:"<<rect.circumference()<<endl; cout<<endl; } void Rectangle::resize(int times){ length*=times; width*=times; } void Rectangle::resize(int i_times,int w_times){ length*=i_times; width*=w_times; } 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); }

浙公网安备 33010602011771号