ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c++实验报告 实验

2021-10-25 23:35:49  阅读:157  来源: 互联网

标签:std real include cout c++ Complex 实验 实验报告 email


complex.cpp文件源码:


#ifndef COMPLEX_HPP
#define COMPLEX_HPP
#include <iostream>
#include <cmath>
class Complex {
public:
    Complex() {};//默认构造函数
    ~Complex() {};//析构函数
    Complex(double r, double i = 0) :real(r), imag(i) {};
    Complex(const Complex& c) {
        real = c.real;
        imag = c.imag;
    };
    double get_real() const { return real; }
    double get_imag() const { return imag; }
    void show() const {
        if (imag > 0 && real != 0)
            std::cout << get_real() << " + " << get_imag() << "i";
        else if (imag < 0 && real != 0)
            std::cout << get_real() << get_imag() << "i";
        else if (imag == 0)
            std::cout << get_real();
        else
            std::cout << get_imag()<<"i";
    }
    void add(Complex x);
    friend Complex add(const Complex &x,const Complex &y);
    friend bool is_equal(Complex x, Complex y);
    friend double abs(Complex& x);
private:
    double real, imag;
};

void Complex::add(Complex x) {
    imag += x.imag;
    real += x.real;
}
Complex add( const Complex &x,  const Complex &y) {
    Complex temp;
    temp.real = x.real + y.real;
    temp.imag = x.imag + y.imag;
    return temp;
}
bool is_equal(Complex x, Complex y) {
    if (x.imag == y.imag && x.real == y.real)  return 1;//
    else
        return 0;//
}
double abs(Complex& x) {
    double value;
    value = sqrt(x.imag * x.imag + x.real * x.real);
    return value;
}
#endif

task3.cpp文件源码:


#include "Complex.hpp"
#include <iostream>

int main()
{
using namespace std;

Complex c1(3, -4);
const Complex c2(4.5);
Complex c3(c1);

cout << "c1 = ";
c1.show();
cout << endl;

cout << "c2 = ";
c2.show();
cout << endl;
cout << "c2.imag = " << c2.get_imag() << endl;

cout << "c3 = ";
c3.show();
cout << endl;

cout << "abs(c1) = ";
cout << abs(c1) << endl;

cout << boolalpha;
cout << "c1 == c3 : " << is_equal(c1, c3) << endl;
cout << "c1 == c2 : " << is_equal(c1, c2) << endl;

Complex c4;
c4 = add(c1, c2);
cout << "c4 = c1 + c2 = ";
c4.show();
cout << endl;

c1.add(c2);
cout << "c1 += c2, " << "c1 = ";
c1.show();
cout << endl;
}

测试截图:



User.hpp文件源码

#ifndef USER_HPP
#define USER_HPP
#include <iostream>
#include <regex>
class User {
public:
    User(std::string _name, std::string _passwd = "111111", std::string _email = "") :
        name(_name), passwd(_passwd), email(_email) {n++;};
    void set_email();
    void change_passwd();
    void print_info() const {
        std::cout << "name:\t" << name << std::endl;
        std::cout << "passwd:\t" << "******" << std::endl;
        std::cout << "email:\t" << email << std::endl;
    }
    static void print_n() {
        std::cout << "there are " << n << " users";
    }
private:
    std::string name, passwd, email;
    static int n;
};
int User::n = 0;
void User::set_email() {
    std::string _email;
        std::cout << "Enter email address: ";
        std::cin >> _email;
        if (_email != email)
        {
            email = _email;
            std::cout << "email is set successfully..." << std::endl;
        }
        else
        {
            std::cout << "Incorrect email format.";
        }
}

void User::change_passwd() {
    std::string oldpd;
    std::string newpd;
    int t = 3, time = 3;//t是还可以输老密码的次数,time是还可以输新密码的次数
    std::cout << "Enter old password: ";
    while (t--) {
        std::cin >> oldpd;//用户输入印象中的老密码
        if (oldpd == passwd) //老密码输入正确
        {
            while (time--) {
                std::cout << "Enter new passwd:";
                std::cin >> newpd;
                bool value = regex_match(newpd, std::regex(".{6}.*"));// 正则匹配,密码长度需大于等于6位
                if (value && newpd != passwd) {
                    passwd = newpd;
                    std::cout << "new passwd is set successfully..." << std::endl;
                    break;//新密码输入正确,跳出小循环
                }
                else
                    std::cout << "your passwd is too simple!" << std::endl;
            }
            break;//3次新密码输入机会用完或者新密码输入正确,跳出大循环
        }
        else {
            if (t == 0) {
                std::cout << "password input error. Please try after a while." << std::endl;
                break;
            }
            else std::cout << "password input error. Please re-enter again: ";
        }
    }
}
#endif

task4.cpp

#include "User.hpp"
#include <iostream>

int main()
{
    using namespace std;

    cout << "testing 1......" << endl;
    User user1("Jonny", "92197", "xyz@hotmail.com");
    user1.print_info();

    cout << endl
        << "testing 2......" << endl
        << endl;
    User user2("Leonard");
    user2.change_passwd();
    user2.set_email();
    user2.print_info();

    User::print_n();
}



总结:
1、在task3复数类的hpp文件中,既可以用对象直接调用数据成员,例如:x.real,也可以用对象调用成员函数进而获得数据成员的值例如x.get_real()。而在main函数中则不可以使用前一种调用方式。
2、(1)在task4的User类中最好使用不同的变量来区分不同数据可以输入的次数。
(2)必须定义静态成员函数print_n()已经静态数据成员n以确保n不会在主函数运行过程中被析构函数释放。n的作用域为全局。

3、尚存的问题:不知道怎么对邮箱格式的合法性进行判断,导致无论邮箱输入什么都算合法。

标签:std,real,include,cout,c++,Complex,实验,实验报告,email
来源: https://www.cnblogs.com/cqql/p/15463775.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有