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

实验一 类与对象

时间:2023-10-19 22:55:09浏览次数:27  
标签:const cout 对象 double void int 实验 include

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;

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 << "============测试类T============" << endl;
test();
cout << endl;
cout << "============测试友元函数func()============" << endl;
func();
}

 

 Task 4:

#include <iostream>
#include <string>
#include <iomanip>

using namespace std;

class Rect{
public:
Rect(double l = 2.0, double w = 1.0){
length = l;
width = w;
}
Rect(const Rect &r);
~Rect();

private:
static const int size;
static int count;
double width,length;

public:
static const string doc;
static const size_info(){
return count;
}

double len(){return length;}
double wide(){return width;}
double area(){return length*width;}
double circumference(){return 2*(length+width);}
void resize(double times){
length*= times;
width*= times;
}
void resize(double l_times,double w_times){
length*= l_times;
width*= w_times;
}
};


void output(const Rect &r) {
cout << "矩形信息: " << endl;
cout << fixed << setprecision(2);
}

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;
}

 

Task 5:

#include <iostream>
#include <cmath>

class Complex{
public:
Complex (double r=0,double i=0){
real = r;
imag = i;
}
Complex (const Complex &c){
real = c.real;
imag = c.imag;
}

private:
double real;
double imag;

public:
double get_real() const {return real;}
double get_imag() const {return imag;}
void show() const {
std::cout << real;
if(imag > 0)
std::cout << "+" << imag << "i";
if(imag < 0)
std::cout << "-" << imag << "i";
}
void add(const Complex &c1){
real += c1.get_real();
imag += c1.get_imag();
}

public:
friend Complex add(const Complex &c1,const Complex &c2){
return Complex(c1.get_real()+c2.get_real(),c1.get_imag()+c2.get_imag());
};
friend bool is_equal(const Complex &c1,const Complex &c2){
return (c1.real == c2.real) && (c1.imag == c2.imag);

}
friend double abs(const Complex &c1){
return sqrt(c1.real*c1.real + c1.imag*c1.imag);
}

};

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();
}

 

 

标签:const,cout,对象,double,void,int,实验,include
From: https://www.cnblogs.com/yanmao/p/17775906.html

相关文章

  • 类和对象
    实验任务1task1.cpp:1//标准库string,vector,array基础用法2#include<iostream>3#include<string>4#include<vector>5#include<array>6//函数模板7//对满足特定条件的序列类型T对象,使用范围for输出8template<typenameT>9voidoutput1(con......
  • 实验1_OOP_22物联网1班_张文瑞
    1.实验任务1:  实验源代码:1//标准库string,vector,array基础用法2#include<iostream>3#include<string>4#include<vector>5#include<array>6//函数模板7//对满足特定条件的序列类型T对象,使用范围for输出8template<typenameT>9voidoutpu......
  • 实验1 类与对象
    实验任务1源代码:1#include<iostream>2#include<string>3#include<vector>4#include<array>567template<typenameT>8voidoutput1(constT&obj){9for(autoi:obj)10std::cout<<......
  • 实验二.
     test1#include<stdio.h>#include<stdlib.h>#include<time.h>#defineN5#defineN1374#defineN2465intmain(){intnumber;inti;srand(time(0));for(i=0;i<N;++i){number=rand()%(N2-N1......
  • 数据结构:实验一+实验二
    数据结构:实验一数据结构:实验二......
  • 205-303 K8S API资源对象介绍03 (Job CronJob Endpoint ConfigMap Secret) 2.17-3.3
    一、水平自动扩容和缩容HPA(K8S版本>=1.23.x)HPA全称HorizontalPodAutoscaler,Pod水平自动伸缩,HPA可以基于CPU利用率replicationcontroller、deployment和replicaset中的pod数量进行自动扩缩容。pod自动缩放对象适用于无法缩放的对象,比如DaemonSetHPA由KubernetesAPI资源和控......
  • 实验一
    1.实验任务一task1源代码: 1//标准库string,vector,array基础用法23#include<iostream>4#include<string>5#include<vector>6#include<array>78//函数模板9//对满足特定条件的序列类型T对象,使用范围for输出10template<typename......
  • oop 实验1类和对象基础编程
    #include<iostream>#include<string>#include<vector>#include<array>//通用函数(此处是模板函数)用于输出容器中的元素,支持范围for(范围for循环,是一种用于遍历容器、数组和其他序列容器的现代C++迭代循环结构。它提供了一种更简洁和易读的方法来遍历容器的元素,而无需手动......
  • 实验二
    task.2#include<stdio.h>intmain(){charn;while(scanf("%c",&n)!=EOF){getchar();switch(n){case'r':printf("stop!\n");break;case'g':printf(&q......
  • 类与对象
    实验任务1#include<iostream>#include<string>#include<vector>#include<array>template<typenameT>voidoutput1(constT&obj){for(autoi:obj)std::cout<<i<<",";std::cout<<"\b\......