实验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);
}

 

 

 

posted @ 2022-09-28 23:15  kierborn  阅读(31)  评论(0)    收藏  举报