const char * 和const void * 无法构成重载嘛
时间: 2023-12-20 16:06:11 浏览: 38
const char * 和 const void * 可以构成重载,但是需要注意的是,它们的参数列表不同。const char * 的参数是一个指向字符数组的指针,而 const void * 的参数是一个指向任意类型的指针。因此,如果您使用 const char * 和 const void * 作为函数参数,则需要确保它们在函数内部被正确地处理。
相关问题
定义一个字符串类 String 数据成员(访问权限定义为protected): 指向存放字符串内容的字符指针(char *str) 成员函数(访问权限定义为public): 默认构造函数:初始化成一个空串 String( ); 带参数的构造函数:根据参数内容初始化字符串 String(const char *content); 拷贝构造函数:初始化字符串 String(const String &cstr); 析构函数:释放堆空间 ~String( ); 设置字符串内容 void set(const char *content); 获取字符串长度(定义为const成员函数)int length() const; 打印字符串内容(定义为const成员函数)void print() const; 重载赋值运算符= (只能作为类成员函数重载) String& operator=(const String &cstr); String& operator=(const char *cstr); 重载下标运算符[ ],实现获取字符串中某个指定位置的字符 (只能作为类成员函数重载) char& operator[](int index); 重载类型转换运算符 char *,实现将字符串类强制转换成字符指针(只能作为类成员函数重载) operator char*( ); 要求:将类的定义与类成员函数的实现分开。
类定义如下:
```c++
class String {
protected:
char* str; // 存储字符串内容的字符指针
public:
String(); // 默认构造函数
String(const char* content); // 带参数的构造函数
String(const String& cstr); // 拷贝构造函数
~String(); // 析构函数
void set(const char* content); // 设置字符串内容
int length() const; // 获取字符串长度
void print() const; // 打印字符串内容
String& operator=(const String& cstr); // 重载赋值运算符=
String& operator=(const char* cstr); // 重载赋值运算符=
char& operator[](int index); // 重载下标运算符[]
operator char*(); // 重载类型转换运算符
};
```
类成员函数的实现如下:
```c++
// 默认构造函数
String::String() {
str = new char[1];
str[0] = '\0';
}
// 带参数的构造函数
String::String(const char* content) {
int len = strlen(content);
str = new char[len + 1];
strcpy(str, content);
}
// 拷贝构造函数
String::String(const String& cstr) {
int len = strlen(cstr.str);
str = new char[len + 1];
strcpy(str, cstr.str);
}
// 析构函数
String::~String() {
delete[] str;
}
// 设置字符串内容
void String::set(const char* content) {
delete[] str;
int len = strlen(content);
str = new char[len + 1];
strcpy(str, content);
}
// 获取字符串长度
int String::length() const {
return strlen(str);
}
// 打印字符串内容
void String::print() const {
printf("%s", str);
}
// 重载赋值运算符=
String& String::operator=(const String& cstr) {
if (this == &cstr) return *this; // 自我赋值
delete[] str;
int len = strlen(cstr.str);
str = new char[len + 1];
strcpy(str, cstr.str);
return *this;
}
String& String::operator=(const char* cstr) {
delete[] str;
int len = strlen(cstr);
str = new char[len + 1];
strcpy(str, cstr);
return *this;
}
// 重载下标运算符[]
char& String::operator[](int index) {
return str[index];
}
// 重载类型转换运算符
String::operator char*() {
return str;
}
```
类中重载+=和=使用传入char *s
好的,那么根据你的需求,可以在类中重载+=和=运算符,使其能够接收一个 char* 类型的参数。
下面是示例代码:
```c++
#include <iostream>
#include <cstring>
using namespace std;
class MyString {
public:
MyString() {
m_length = 0;
m_data = new char[1];
m_data[0] = '\0';
}
MyString(const char* str) {
m_length = strlen(str);
m_data = new char[m_length + 1];
strcpy(m_data, str);
}
MyString(const MyString& other) {
m_length = other.m_length;
m_data = new char[m_length + 1];
strcpy(m_data, other.m_data);
}
~MyString() {
delete[] m_data;
}
void append(const char* str) {
int newLength = m_length + strlen(str);
char* newData = new char[newLength + 1];
strcpy(newData, m_data);
strcat(newData, str);
delete[] m_data;
m_data = newData;
m_length = newLength;
}
MyString& operator=(const char* str) {
if (m_data) {
delete[] m_data;
}
m_length = strlen(str);
m_data = new char[m_length + 1];
strcpy(m_data, str);
return *this;
}
MyString& operator+=(const char* str) {
append(str);
return *this;
}
friend ostream& operator<<(ostream& os, const MyString& str) {
os << str.m_data;
return os;
}
private:
int m_length;
char* m_data;
};
int main() {
MyString str1("Hello");
MyString str2 = "World";
str1 += "!";
cout << str1 << " " << str2 << endl;
return 0;
}
```
在以上代码中,我们定义了一个 MyString 类,其中重载了 = 和 += 运算符,使其能够接收一个 char* 类型的参数。具体实现时,我们使用了 strcpy、strcat 等字符串操作函数来完成字符串的复制和拼接。在 main 函数中,我们演示了如何使用该类对象进行字符串拼接。