cuốn sách gpt4 ai đã làm

Có thể điều khiển cả toán tử [] và operator= cùng một lúc không?

In lại Tác giả: Walker 123 Thời gian cập nhật: 27-11-2023 23:14:50 25 4
mua khóa gpt4 Nike

Tôi đang cố gắng tạo một lớp BoolArray đại diện cho một mảng các giá trị bool thay vì giữ 1 giá trị bool cho mỗi biến bool. Nó sử dụng 1 biến ký tự để biểu diễn 8 giá trị bool bằng bit và tiết kiệm bộ nhớ. Tôi muốn sử dụng operator[] để làm cho nó thuận tiện như một mảng thông thường.

Tôi có thể sử dụng arr[5] và trả về giá trị bool cho bit thứ năm. Vấn đề của tôi là việc phân phối điểm. Mình không tham khảo được chút nào nên cần tạo một hàm để thực hiện tác vụ đó. Câu hỏi của tôi là liệu có thể sử dụng nạp chồng toán tử để kiểm soát việc gán kiểu mảng hay không. Giải pháp của tôi là sử dụng một lớp khác (MyBoolean) và trả về nó dưới dạng tham chiếu đến toán tử BoolArray[]. MyBoolean quá tải operator= và thay đổi các bit của BoolArray. Có cách nào dễ dàng hơn để quá tải một số loại operator[]= hoặc thứ gì đó tương tự không?

#include 
#include
sử dụng không gian tên std;



chuỗi int_to_binary_string(số int)
{
if (số == 0) trả về "0";
if (số == 1) trả về "1";

nếu (số % 2 == 0 )
trả về int_to_binary_string(số / 2) + "0";
khác
trả về int_to_binary_string(số / 2) + "1";
}




lớp MyBoolean;
lớp BoolArray {

riêng tư:
ký tự không dấu* mảng;
kích thước int;


void setBit(int bit_number,giá trị bool);

công cộng:
BoolArray rõ ràng (kích thước int);
~BoolArray();
Toán tử MyBoolean[](chỉ mục int không dấu);
int getSize() const;

lớp bạn MyBoolean;
};



//****************************** MyBoolean ***************** * **************
lớp MyBoolean {

riêng tư:
giá trị bool;
int bit_number;
BoolArray* bool_array;

công cộng:
// --- Người xây dựng ---
MyBoolean(giá trị bool,int bit_number,BoolArray* bool_array):
giá trị(giá trị),bit_number(bit_number),bool_array(bool_array)
{}


// --- dàn diễn viên ---
toán tử bool() const{
giá trị trả về;
}

MyBoolean& operator=(bool new_value) {
giá trị = new_value;
bool_array->setBit(bit_number,new_value);
}
};



//*************************** BoolArray ***************** * *************
void BoolArray::setBit(int bit_number,giá trị bool) {
int chỉ số = sàn((double)bit_number/8);
bit_number -= chỉ số*8;

cout << "đang cố gắng đặt " << bit_number << " thành " << value << endl;

if(giá trị==true) {
int nhị phân_num = pow(2,bit_number);
cout << "arr[index]: " << int_to_binary_string(arr[index]) << " - binary_num: " << int_to_binary_string(binary_num);
arr[index] = arr[index] | binary_num;
cout << " - after: " << int_to_binary_string(arr[index]) << endl;
}
khác {
int binary_num = 0 | 255;
int binary_num_2 = pow(2,bit_number);
binary_num = binary_num^binary_num_2;
arr[index] = arr[index] & binary_num;
}
}


// --- Người xây dựng ---
BoolArray::BoolArray(int size) :
size(size)
{
size = ceil((double)size/8);
arr = new unsigned char[size];
}


// --- Destructor ---
BoolArray::~BoolArray() {
delete[] arr;
}


// --- operator[] ---
MyBoolean BoolArray::operator[](unsigned int index) {
if(index>size-1)
throw "error";

int arr_index = floor((double)index/8);
int bit_number = index - arr_index*8;
unsigned int binary_num = pow(2,bit_number);
int value= false;
if((arr[arr_index] & binary_num)>0)
value = true;

MyBoolean my_bool(value,index,this);

return my_bool;
}


// --- size ---
int BoolArray::getSize() const {
return size;
}



ostream& operator<<(ostream& os, MyBoolean b) {
os << (bool) b;
return os;
}

ostream& operator<<(ostream& os,BoolArray& arr) {
for(int i=0;i<>
os << arr[i] << "->";
return os;
}


int chính() {
BoolArray arr(12);
arr[0] = true;
arr[1] = false;
arr[2] = true;
arr[3] = false;
arr[4] = true;
arr[5] = false;
arr[6] = true;
arr[7] = false;
arr[8] = true;
arr[9] = false;
arr[10] = true;
arr[11] = false;
cout << arr;
trả về 0;
}

câu trả lời hay nhất

你基本上已经有了最好的解决方案:创建一个代理类,它可以从 bool 分配但在内部只分配 1 位,并且可以隐式转换为 bool . BoolArray将从 operator[] 返回此代理类.

其实就是这个 vector vector::reference 做.正如评论者所说,std::vectơ专门用于 bool做你正在写的。因此,除非这只是为了学习,否则您所写的内容是无用的/多余的。

关于c++ - 是否可以同时控制 [] operator 和 operator=?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17133133/

25 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress