任务1:
t.h
#pragma once #include <string> class T { public: T(int x = 0, int y = 0); T(const T &t); T(T &&t); ~T(); void adjust(int ratio); void display() const; private: int m1, m2; public: static int get_cnt(); public: static const std::string doc; static const int max_cnt; private: static int cnt; friend void func(); }; void func();
t.cpp
#include "t.h" #include <iostream> #include <string> using std::cout; using std::endl; using std::string; const std::string T::doc{"a simple class sample"}; const int T::max_cnt = 999; int T::cnt = 0; T::T(int x, int y): m1{x}, m2{y} { ++cnt; cout << "T constructor called.\n"; } T::T(const T &t): m1{t.m1}, m2{t.m2} { ++cnt; cout << "T copy constructor called.\n"; } T::T(T &&t): m1{t.m1}, m2{t.m2} { ++cnt; cout << "T move constructor called.\n"; } T::~T() { --cnt; cout << "T destructor called.\n"; } void T::adjust(int ratio) { m1 *= ratio; m2 *= ratio; } void T::display() const { cout << "(" << m1 << ", " << m2 << ")" ; } int T::get_cnt() { return cnt; } void func() { T t5(42); t5.m2 = 2049; cout << "t5 = "; t5.display(); cout << endl; }
task1.cpp
#include "t.h" #include <iostream> using std::cout; using std::endl; void test(); int main() { test(); cout << "\nmain: \n"; cout << "T objects'current count: " << T::get_cnt() << endl; } void test() { cout << "test class T: \n"; cout << "T info: " << T::doc << endl; cout << "T objects'max count: " << T::max_cnt << endl; cout << "T objects'current count: " << T::get_cnt() << endl << endl; T t1; cout << "t1 = "; t1.display(); cout << endl; T t2(3, 4); cout << "t2 = "; t2.display(); cout << endl; T t3(t2); t3.adjust(2); cout << "t3 = "; t3.display(); cout << endl; T t4(std::move(t2)); cout << "t3 = "; t4.display(); cout << endl; cout << "T objects'current count: " << T::get_cnt() << endl; func(); }
问题1:
问题2:
问题3:
任务2:
Complex.h:
#include <iostream> #include <string> class Complex { public: static const std::string doc; Complex(double real = 0.0, double imag = 0.0); Complex(const Complex& other); double get_real() const; double get_imag() const; void add(const Complex& other); friend Complex add(const Complex& c1, const Complex& c2); friend bool is_equal(const Complex& c1, const Complex& c2); friend bool is_not_equal(const Complex& c1, const Complex& c2); friend void output(const Complex& c); friend double abs(const Complex& c); private: double real; double imag; };
Complex.cpp:
#include "Complex.h" #include <iostream> #include <cmath> const std::string Complex::doc = "a simplified complex class"; Complex::Complex(double real, double imag) : real(real), imag(imag) {} Complex::Complex(const Complex& other) : real(other.real), imag(other.imag) {} double Complex::get_real() const { return real; } double Complex::get_imag() const { return imag; } void Complex::add(const Complex& other) { real += other.real; imag += other.imag; } Complex add(const Complex& c1, const Complex& c2) { return Complex(c1.real + c2.real, c1.imag + c2.imag); } bool is_equal(const Complex& c1, const Complex& c2) { return (c1.real == c2.real) && (c1.imag == c2.imag); } bool is_not_equal(const Complex& c1, const Complex& c2) { return !is_equal(c1, c2); } void output(const Complex& c) { if(c.imag>=0){ std::cout << c.real << "+" << c.imag << "i"; } else{ std::cout <<c.real << c.imag << "i"; } } double abs(const Complex& c) { return std::sqrt(c.real * c.real + c.imag * c.imag); }
main.cpp:
#include "Complex.h" #include <iostream> using std::cout; using std::endl; using std::boolalpha; void output(const Complex& c); void test() { cout << "类成员测试: " << endl; cout << Complex::doc << endl; cout << endl; cout << "Complex对象测试: " << endl; Complex c1; Complex c2(3, -4); const Complex c3(3.5); Complex c4(c3); cout << "c1 = "; output(c1); cout << endl; cout << "c2 = "; output(c2); cout << endl; cout << "c3 = "; output(c3); cout << endl; cout << "c4 = "; output(c4); cout << endl; cout << "c4.real = " << c4.get_real() << ", c4.imag = " << c4.get_imag() << endl; cout << endl; cout << "复数运算测试: " << endl; cout << "abs(c2) = " << abs(c2) << endl; c1.add(c2); cout << "c1 += c2, c1 = "; output(c1); cout << endl; cout << boolalpha; cout << "c1 == c2 : " << is_equal(c1, c2) << endl; cout << "c1 != c3 : " << is_not_equal(c1, c3) << endl; c4 = add(c2, c3); cout << "c4 = c2 + c3, c4 = "; output(c4); cout << endl; } int main() { test(); return 0; }
任务3:
#include <iostream> #include <complex> using std::cout; using std::endl; using std::boolalpha; using std::complex; void test() { cout << "标准库模板类comple测试: " << endl; complex<double> c1; complex<double> c2(3, -4); const complex<double> c3(3.5); complex<double> c4(c3); cout << "c1 = " << c1 << endl; cout << "c2 = " << c2 << endl; cout << "c3 = " << c3 << endl; cout << "c4 = " << c4 << endl; cout << "c4.real = " << c4.real() << ", c4.imag = " << c4.imag() << endl; cout << endl; cout << "复数运算测试: " << endl; cout << "abs(c2) = " << abs(c2) << endl; c1 += c2; cout << "c1 += c2, c1 = " << c1 << endl; cout << boolalpha; cout << "c1 == c2 : " << (c1 == c2) << endl; cout << "c1 != c3 : " << (c1 != c3) << endl; c4 = c2 + c3; cout << "c4 = c2 + c3, c4 = " << c4 << endl; } int main() { test(); }
任务4:
Fraction.h
#include <iostream> #include string class Fraction{ public: static const std::string doc; private: Fraction(int numerator = 0, int denominator = 1); int up; int down; void simplify(); public: int get_up() const; int get_down() const; Fraction negative() const; friend output(const Fraction &f1,const Fraction &f2); friend add(const Fraction &f1,const Fraction &f2); friend sub(const Fraction &f1,const Fraction &f2); friend mul(const Fraction &f1,const Fraction &f2); friend div(const Fraction &f2,const Fraction &f2); };
标签:std,const,对象,imag,编程,int,Complex,实验,include From: https://www.cnblogs.com/luyiming/p/18494449