#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();
}
![]()
#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 = " << abs(c1) << endl;
cout << boolalpha;
cout << "c1 == c2:" << (c1 == c2) << endl;
cout << "c3 == c2:" << (c3 == c2) << endl;
complex<double> c4 = 2;
cout << "c4 = " << c2 << endl;
c4 += c1;
cout << "c4 = " << c4 << endl;
}
int main() {
test_std_complex();
}
![]()
#include <iostream>
#include <string>
using namespace std;
class T {
public:
T(int x = 0, int y = 0);
T(const T &t);
T(T &&t);
~T();
void set_m1(int x);
int get_m1() const;
int get_m2() const;
void display() const;
friend void func();
private:
int m1,m2;
public:
static void disply_count();
public:
static const string doc;
static const int max_count;
private:
static int count;
};
const string T::doc{"a simple class"};
const int T::max_count = 99;
int T::count = 0;
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;
}
void func() {
T t1;
t1.set_m1(55);
t1.m2 = 77;
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();
T::disply_count();
}
int main(){
cout << "==========测试类==========" << endl;
test();
cout << endl;
cout << "==========测试友元函数func()==========" << endl;
func();
}
![]()
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
class Rect
{
public:
Rect();
Rect(int l, int w);
Rect(const Rect &r);
double len()const{return lenth;}
double wide()const{return width;}
double area()const{return lenth*width;}
double circumference()const{return (lenth+width)*2;}
void resize(double times);
void resize(double l_times, double w_times);
static string doc;
static int size_info(){return count;}
~Rect() {count--;}
private:
double lenth, width;
static int count;
};
Rect::Rect(){
lenth = 2.0;
width = 1.0;
count++;
}
Rect::Rect(int l, int w){
lenth = l;
width = w;
count++;
}
Rect::Rect(const Rect &r){
lenth = r.lenth;
width = r.width;
count++;
}
void Rect::resize(double times){
lenth *= times;
width *= times;
}
void Rect::resize(double l_times, double w_times){
lenth *=l_times;
width *=w_times;
}
int Rect::count = 0;
string Rect::doc = "a simple Rect class";
void output (const Rect &r) {
cout << "矩形信息:" << endl;
cout << fixed << setprecision(2);
cout << "长: " << left << r.len() << endl;
cout << "宽: " << left << r.wide() << endl;
cout << "面积: " << left << r.area() << endl;
cout << "周长: " << left << r.circumference() << endl;
}
void test () {
cout << "矩形类信息:" << Rect::doc << endl;
cout << "当前矩形对象数目:" << Rect::size_info() << endl;
Rect r1;
output(r1);
Rect r2(4,3);
output(r2);
Rect r3(r2);
r3.resize(2);
output(r3);
r3.resize(5,2);
output(r3);
cout << "当前矩形对象数目:" << Rect::size_info() << endl;
}
int main(){
test();
cout <<"当前矩形对象数目:" << Rect::size_info() <<endl;
}
![]()
#include <iostream>
#include <cmath>
using namespace std;
class Complex{
public:
Complex();
Complex(double real0);
Complex(double real0,double imag0);
Complex(const Complex &x);
double get_real()const {return real;}
double get_imag()const {return imag;}
void show()const;
void add(const Complex &x);
friend Complex add(Complex x1, Complex x2);
friend bool is_equal(const Complex &x1,const Complex &x2);
friend double abs(const Complex &x);
private:
double real,imag;
};
Complex::Complex(){
real = 0;
imag = 0;
}
Complex::Complex(double real0){
real = real0;
imag = 0;
}
Complex::Complex(double real0,double imag0) {
real = real0;
imag = imag0;
}
Complex::Complex(const Complex &x){
real = x.real;
imag = x.imag;
}
void Complex::show() const {
using namespace std;
if(real == 0 && imag == 0) {cout << 0;}
else if(real == 0){cout << imag << "i"; }
else if(imag == 0){cout << real;}
else {
if (imag > 0){
cout << real << " + " << imag << "i" ;
}
else if(imag < 0) {
cout << real << " - " << -imag << "i" ;
}
}
}
void Complex::add(const Complex &x){
real = real+x.real;
imag = imag+x.imag;
}
Complex add(Complex x1, Complex x2) {
double real,imag;
x1.real = x1.real + x2.real;
x2.imag = x1.imag + x2.imag;
return x1;
}
bool is_equal(const Complex &x1, const Complex &x2) {
bool real,imag;
real = x1.real == x2.real;
imag = x1.imag == x2.imag;
return real && imag;
}
double abs(const Complex &x) {
return sqrt(pow(x.real, 2) + pow(x.imag, 2));
}
void test(){
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;
}
int main() {
test();
}
![]()