task 1: #include <iostream> #include <string> #include <vector> #include <array> template<typename T> void output1(const T &obj) { for (auto i : obj) std::cout << i << ", "; std::cout << "\b\b \n"; } template<typename T> void output2(const T &obj) { for (auto p = obj.begin(); p != obj.end(); ++p) std::cout << *p << ", "; std::cout << "\b\b \n"; } void test_array() { using namespace std; array<int, 5> x1; cout << "x1.size() = " << x1.size() << endl; x1.fill(42); x1.at(0) = 999; x1[4] = -999; cout << "x1: "; output1(x1); cout << "x1: "; output2(x1); array<int, 5> x2{x1}; cout << boolalpha << (x1 == x2) << endl; x2.fill(22); cout << "x2: "; output1(x2); swap(x1, x2); cout << "x1: "; output1(x1); cout << "x2: "; output1(x2); } void test_vector() { using namespace std; vector<int> v1; cout << v1.size() << endl; cout << v1.max_size() << endl; v1.push_back(55); cout << "v1: "; output1(v1); vector<int> v2 {1, 0, 5, 2}; v2.pop_back(); v2.erase(v2.begin()); v2.insert(v2.begin(), 999); v2.insert(v2.end(), -999); cout << v2.size() << endl; cout << "v2: "; output2(v2); vector<int> v3(5, 42); cout << "v3: "; output1(v3); vector<int> v4(v3.begin(), v3.end() - 2); cout << "v4: "; output1(v4); } void test_string() { using namespace std; string s1{"oop"}; cout << s1.size() << endl; for (auto &i : s1) i -= 32; s1 += "2023"; s1.append(", hello"); cout << s1 << endl; } int main() { using namespace std; cout << "===========测试1: array模板类基础用法===========" << endl; test_array(); cout << "\n===========测试2: vector模板类基础用法===========" << endl; test_vector(); cout << "\n===========测试3: string类基础用法===========" << endl; test_string(); }
task 2: #include <iostream> #include <complex> void test_std_complex() { using namespace std; complex<double> c1{3, 4}, c2{4.5}; const complex<double> c3{c2}; cout << "c1 = " << c1 << endl; cout << "c2 = " << c2 << endl; cout << "c3 = " << c3 << endl; cout << "c3.real = " << c3.real() << ", " << "c3.imag = " << c3.imag() << endl; cout << "c1 + c2 = " << c1 + c2 << endl; cout << "c1 - c2 = " << c1 - c2 << endl; cout << "abs(c1) = " << abs(c1) << endl; cout << boolalpha; cout << "c1 == c2: " << (c1 == c2) << endl; cout << "c3 == c2: " << (c3 == c2) << endl; complex<double> c4 = 2; cout << "c4 = " << c4 << endl; c4 += c1; cout << "c4 = " << c4 << endl; } int main() { test_std_complex(); }
task 3: #include <iostream> #include <string> using namespace std; // 类T的声明 class T { public: T(int x = 0, int y = 0); // 带有默认形值的构造函数 T(const T &t); // 复制构造函数 T(T &&t); // 移动构造函数 ~T(); // 析构函数 void set_m1(int x); // 设置T类对象的数据成员m1 int get_m1() const; // 获取T类对象的数据成员m1 int get_m2() const; // 获取T类对象的数据成员m2 void display() const; // 显示T类对象的信息 friend void func(); // 声明func()为T类友元函数 private: int m1, m2; public: static void disply_count(); // 类方法,显示当前T类对象数目 public: static const string doc; // 类属性,用于描述T类 static const int max_count; // 类属性,用于描述T类对象的上限 private: static int count; // 类属性,用于描述当前T类对象数目 }; // 类的static数据成员:类外初始化 const string T::doc{"a simple class"}; const int T::max_count = 99; int T::count = 0; // 类T的实现 T::T(int x, int y): m1{x}, m2{y} { ++count; cout << "constructor called.\n"; } T::T(const T &t): m1{t.m1}, m2{t.m2} { ++count; cout << "copy constructor called.\n"; } T::T(T &&t): m1{t.m1}, m2{t.m2} { ++count; cout << "move constructor called.\n"; } T::~T() { --count; cout << "destructor called.\n"; } void T::set_m1(int x) { m1 = x; } int T::get_m1() const { return m1; } int T::get_m2() const { return m2; } void T::display() const { cout << m1 << ", " << m2 << endl; } // 类方法 void T::disply_count() { cout << "T objects: " << count << endl; } // 友元函数func():实现 void func() { T t1; t1.set_m1(55); t1.m2 = 77; // 虽然m2是私有成员,依然可以直接访问 t1.display(); } // 测试 void test() { cout << "T class info: " << T::doc << endl; cout << "T objects max_count: " << T::max_count << endl; T::disply_count(); T t1; t1.display(); t1.set_m1(42); T t2{t1}; t2.display(); T t3{std::move(t1)}; t3.display(); t1.display(); } int main() { cout << "============测试类T============" << endl; test(); cout << endl; cout << "============测试友元函数func()============" << endl; func(); }
task 4: #include <bits/stdc++.h> using namespace std; class Rect { public: Rect(double l = 2, double w = 1); Rect(const Rect &r); ~Rect(); double dl() const; double dw() const; double da() const; double dc() const; void resize(int flag); void resize(int flag0, int flag1); private: static int size; double length, width; public: static void size_info(); static const string doc; }; int Rect::size = 0; const string Rect::doc = "a simple Rect class"; Rect::Rect(double l, double w) { length = l; width = w; ++size; } Rect::Rect(const Rect &r) { length = r.length; width = r.width; ++size; } Rect::~Rect() { --size; } double Rect::dl() const { return length; } double Rect::dw() const { return width; } double Rect::da() const { return length * width; } double Rect::dc() const { return 2 * (length + width); } void Rect::resize(int flag0, int flag1) { length *= flag0; width *= flag1; } void Rect::resize(int flag) { length *= flag; width *= flag; } void Rect::size_info() { cout << "当前矩形对象数目:" << size << endl; } void output(const Rect &r) { cout << "矩形信息:" << endl; cout << "长: " << fixed << setprecision(2) << r.dl() << endl; cout << "宽: " << r.dw() << endl; cout << "面积: " << r.da() << endl; cout << "周长: " << r.dc() << endl; } void test() { cout << "矩形类信息:" << Rect::doc << endl; Rect::size_info(); Rect r1; output(r1); Rect r2(4, 3); output(r2); Rect r3(r2); r3.resize(2); output(r3); r3.resize(5, 2); output(r3); Rect::size_info(); } int main() { test(); Rect::size_info(); return 0; }
task 5:
标签:const,cout,对象,double,void,int,实验,Rect From: https://www.cnblogs.com/gycgy/p/17776007.html