gpt4 book ai didi

c++ - 在没有 std::string 的情况下构造字符串

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:49:53 24 4
gpt4 key购买 nike

我正在做一个不允许我们使用 <string> 的项目完全没有库——我们只能使用字符串作为字符指针,我们必须为它们编写自己的函数(strcpy、strlen 等)。我正在尝试使用以下头文件构建 RentalCar 类:

#ifndef RENTALCAR_H
#define RENTALCAR_H
class RentalCar {
public:
RentalCar();
RentalCar(char* make, char* model);
char* getMake() const;
char* getModel() const;
void setMake(char* make = "");
void setModel(char* model = "");
private:
char m_make[256];
char m_model[256];
};
#endif

我的源文件包含以下内容:

#include <iostream>
#include "RentalCar.h"
using namespace std;

RentalCar::RentalCar() {
setYear();
setMake();
setModel();
setPrice();
setAvailable();
}

RentalCar::RentalCar(int year, char* make, char* model, float price,
bool available) {
setYear(year);
setMake(make);
setModel(model);
setPrice(price);
setAvailable(available);
}

char* RentalCar::getMake() const{
return m_make;
}

char* RentalCar::getModel() const{
return m_model;
}

void RentalCar::setMake(char* make) {
myStringCopy(m_make, make);
}

void RentalCar::setModel(char* model) {
myStringCopy(m_model, model);
}


char* myStringCopy(char* destination, const char* source) {
int index = 0;
while(*(source + index) != '\0') {
*(destination + index) = *(source + index);
index++;
}
*(destination + index) = '\0';
return destination;
}

我的问题是我在 getMake 和 getModel 方法中遇到以下错误:

cannot initialize return object of type 'char *'
with an lvalue of type 'char const[256]'

我不确定如何构造默认字符串而不使它们成为文字 - 这就是我认为我收到此错误的原因。

我的另一个问题是,为了在我的 setMake() 和 setModel() 函数中设置字符串,我需要使用我的 myStringCopy() 函数,所以我应该将它作为一个函数包含在这个类中吗?以其他方式访问它的方法?我还需要在我的实际项目文件中使用它,将它包含在那里和 RentalCar.cpp 中感觉是多余的

值得一提的是,我们不允许以任何方式使用数组索引来处理字符串 - 除了初始化新字符串。

任何帮助将不胜感激!谢谢!

最佳答案

char* getMake() const;
char* getModel() const;

表示即使类是不可变的,您也可以返回一个指向可变值的指针。函数声明中的尾随 const 表示此函数必须在整个类为 const 时特别有效,这意味着所有*成员都使用 const 关键字。

const char* getMake() const { return m_make; }
const char* getModel() const { return m_model; }
char* getMake() { return m_make; }
char* getModel(){ return m_model; }

应该可以。 const 版本的类获取不可变值,但非 const 不会。虽然,返回非 const 指针会破坏封装。所以我会这样做:

const char* getMake() const { return m_make; }
const char* getModel() const { return m_model; }

就这样吧。该类的可变版本和不可变版本都将从您的 get 函数中获取不可变值。这可能是期望的结果。

* mutable 打个招呼,然后溜到一个角落去死。

关于c++ - 在没有 std::string 的情况下构造字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54672095/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com