实验一 类和对象


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

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(4, 5);
    p1.show();
    
    Point p2 = p1;
    p2.show();
    
    Point p3{p2};
    p3.show();
    cout << p3.get_x() << endl; 
}

 

 

 

 

 

#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(); 
}

 

 


#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();
}



1.构造函数的调用:

 line 42:默认构造函数被编译器自动调用;

 line 46:构造函数被编译器自动调用;

 line 48:复制构造函数被编译器自动调用;

 line 51:移动构造函数被编译器自动调用;

2.析构函数的调用:
当程序执行到line 53的“}”时,析构函数被编译器自动调用,销毁了对象x1、x2、x3、x4占用的资源,调用顺序分别为派生类本身的析构函数、对象成员析构函数、基类析构函数。
#include <iostream>
#include <iomanip>

class Rectangle{
    public:
        Rectangle();
        Rectangle(float l, float w);
        Rectangle(const Rectangle & r);
        ~Rectangle() = default;
        
        float len() { return length;};
        float wide() { return width;};
        float area() { return length*width;};
        float circumference() { return (length+width)*2;};
        void resize(float times);
        void resize(float l_times, float w_times);
    private:
        float length,width; 
}; 


Rectangle::Rectangle()
{
    length = 2.0;
    width = 1.0;
}

Rectangle::Rectangle (float l, float w)
{
    length = l;
    width = w;
}

void Rectangle::resize(float times)
{
    length = length * times;
    width = width * times;
}

void Rectangle::resize(float l_times,float w_times)
{
    length = length * l_times;
    width = width * w_times;
}

Rectangle::Rectangle(const Rectangle& r)
{
    length = r.length;
    width = r.width;
}

void output(const Rectangle &rect){
    using namespace std;
    
    Rectangle r = rect;
    cout << "矩形信息:\n";
    cout << fixed <<setprecision(2);
    cout << "长:    "  << r.len() << "\n"
         << "宽:    "  << r.wide() << "\n"
         << "面积:  "  << r.area() << "\n"
         << "周长:  "  << r.circumference() << "\n" 
         << 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-09-28 19:26  .木枝  阅读(31)  评论(0)    收藏  举报