首页 > 其他分享 >实验一:类和对象

实验一:类和对象

时间:2022-10-06 22:22:42浏览次数:41  
标签:const width 对象 double times int 实验 Rectangle

1.task2
#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::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;
}

 

2.task3
#include <iostream>
#include <iomanip>

using std::cout;
using std::endl;
// 定义时钟类Clock
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::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();
}

 

 3.task4

#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();//42
    
    X x2{2049};    //构造函数
    x2.show();//2049
    
    X x3{x1};    //复制构造函数
    x3.show();//42
    
    X x4{ std::move(x2) };    //移动构造函数 
    x4.show();//2049
    //析构函数被调用4次,销毁和清理对象x1,x2,x3,x4占用的资源 
}

 

 4.task5

#include<iostream>
#include<iomanip>

using namespace std;
 
class Rectangle{
public:
    Rectangle();    //默认构造函数
    Rectangle(double l, double w);    //构造函数
    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 l_times, double w_times);

private: 
    double length,width;
};

//Rectangle类的实现 
Rectangle::Rectangle(): length{2.0}, width{1.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 *= times; width *= times; }
void Rectangle::resize(double l_times, double w_times) { length *= l_times; width *= w_times; }

// 普通函数, 用于输出矩形信息
void output(Rectangle& rect)
{
    cout << "矩形信息:\n"
         << fixed << setprecision(2)    //setprecision(n)与setiosflags(ios::fixed)合用,控制小数点右边的数字个数
         << left << setw(8) << "长:" << rect.len() << endl
                  << setw(8) << "宽:" << rect.wide() << endl
                  << setw(8) << "面积:" << rect.area() << endl
                  << setw(8) << "周长:" << rect.circumference() << endl
                  << 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);
}

 

标签:const,width,对象,double,times,int,实验,Rectangle
From: https://www.cnblogs.com/mohaolan/p/16758684.html

相关文章

  • 实验4:开源控制器实践——OpenDaylight
    实验4:开源控制器实践——OpenDaylight一、实验目的能够独立完成OpenDaylight控制器的安装配置;能够使用Postman工具调用OpenDaylightAPI接口下发流表。二、实验环境......
  • 实验3:OpenFlow协议分析实践
    一、基础要求1)/home/用户名/学号/lab3/目录下的拓扑文件#!/usr/bin/envpythonfrommininet.netimportMininetfrommininet.nodeimportController,RemoteContro......
  • 1.10 高级语法_类和对象 类的创建和类的对象实例化调用
    #类的创建和类的对象实例化调用(类中的函数叫方法)classGirl:#类(别)#创建类def__init__(self,hair,name,age):self.hair=hair......
  • 实验3:OpenFlow协议分析实践
    实验3:OpenFlow协议分析实践一、实验目的能够运用wireshark对OpenFlow协议数据交互过程进行抓包;能够借助包解析工具,分析与解释OpenFlow协议的数据包交互过程与机制......
  • 实验4:开源控制器实践——OpenDaylight
    一.基本要求1.利用Mininet平台搭建下图所示网络拓扑,并连接OpenDaylight控制器。2.通过Postman工具调用OpenDaylight提供的API下发流表,实现拓扑内主机h1和h3网络中断10......
  • XSS攻击实验
    实验目的:在winxp系统中的IE浏览器版本存在漏洞,通过劫持IE获取cookie,再进行登录操作实验步骤:1、部署实验环境winxp(IE浏览器)、主机:192.168.17.1、kali:19......
  • 类与对象
    类与对象时整个面向对象中最基础的组成单元。类:是抽象的概念集合,表示的是一个共性的产物,类之中定义的是属性和行为(方法);对象:对象是一种个性的表示,表示一个独立的个体,每个对......
  • 面向对象基础
    面向对象之对象与类的理解、创建面向对象独有功能、动静态方法、继承、名字查找顺序、经典类与新式类、派生方法派生,三大特性之封装、多态,property伪装、反射反射方法、......
  • 实验4:开源控制器实践——OpenDaylight
    实验4:开源控制器实践——OpenDaylight一、实验目的1.能够独立完成OpenDaylight控制器的安装配置;2.能够使用Postman工具调用OpenDaylightAPI接口下发流表。二、实验环......
  • 实验1 类与对象(1)
    实验任务(1)task1_11#include<iostream>2#include<string>3#include<vector>4intmain(){5usingnamespacestd;6strings1;7strings2{"cp......