Grafana页面告警配置实战:从阈值到通知策略的完整链路
2026/10/2 21:43:16
现有一个数组类Array,请你设计一个正确的拷贝构造函数。
第一行一个整数nn,表示数组的大小。
第二行nn个整数,表示数组。
输出这个数组。
#include<bits/stdc++.h> using namespace std; class Array{ private: int n;//数组大小 int *a;//数组 public: Array(){ cin>>n; a=new int [n]; for (int i=0;i<n;i++) cin>>a[i]; } ~Array(){ delete []a; } int getlen(){ return n; } int get(int i){ return a[i]; } Array(Array &array) { n = array.getlen(); a = new int[n]; for(int i=0;i<n;i++) { a[i] = array.get(i); } } void show(){ for (int i=0;i<n;i++) cout<<a[i]<<' '; } }; int main(){ Array a; Array b=a; b.show(); return 0; }//动态数组+深拷贝构造 #include <iostream> using namespace std; class Array{ private: int size; int* a; public: //有参构造:开辟数组内存 Array(int n){ size = n; arr = new int[size]; } //深拷贝构造函数 Array(const Array& other) { //1.拷贝长度 size = other.size; //2.新开独立堆内存,不是直接复制指针 arr = new int[size]; //3.逐元素复制数据 for(int i=0;i<size;i++) { arr[i] = other.arr[i]; } } // 设置数组元素 void setData() { for (int i = 0; i < size; i++) { cin >> arr[i]; } } // 打印数组 void show() { for (int i = 0; i < size; i++) { cout << arr[i] << " "; } cout << endl; } // 析构释放动态数组 ~Array() { delete[] arr; } }; int main() { int n =0; cin >> n; Array a1(n); //==》Array a1 = Array(n); a1.setData(); //调用拷贝构造,生成副本a2 Array a2 = a1; a2.show(); return 0; }Array(const Array& other) { // 1. 拷贝长度 size = other.size; // 2. 新开独立堆内存,不是直接复制指针 arr = new int[size]; // 3. 逐元素复制数据 for (int i = 0; i < size; i++) { arr[i] = other.arr[i]; } }那你这个用const修饰为什么不出错 1. other 是 const Array& 常引用; 2. size、arr 是同类的私有成员变量; 3. 同一个类的所有对象,互相可以直接访问对方私有变量; 4. 只是单纯读取成员值,没有调用任何成员函数,不存在 “常对象调用非 const 函数” 的限制,所以完全合法。 array 是 const 对象; getlen()、get() 没有后缀 const,属于普通成员函数; C++ 语法规则:const 对象只能调用尾部带 const 的成员函数,调用普通函数直接编译报错。 即使 other 是 const,你读取它的成员变量也没问题; 但不能修改 other.size、other.arr,只能读。 other.size = 100; // 报错,const对象成员不可修改 size = other.size; // 合法,只是读取| 访问方式 | const 对象是否允许 | 条件 |
|---|---|---|
直接访问同类私有成员other.size | ✅ 允许 | 同个类内,仅读取 |
调用无 const 成员函数other.get() | ❌ 禁止 | 函数未标记只读 |
调用带 const 成员函数other.get() const | ✅ 允许 | 函数声明末尾加 const |