我是新手,正在学习 C++。我知道相当多的Java和一些C。
我想要做的是创建一个不可变名称类,它接受一个字符串值,将该字符串复制到一个类字段,然后最终将其散列到一个可以比字符串更有效地解析的 ID。
由于普遍缺乏 C++ 字符串的知识,我碰壁了。这是我到目前为止所拥有的...
#pragma once
#include <string>
class Name
{
public:
Name(std::string s);
~Name(void);
int getId();
std::string getName();
private:
int id;
std::string name;
};
和...
#include "Name.h"
Name::Name(std::string s)
{
}
所以我想要做的是将s的值存储在“name”私有字段中,由构造函数传入。据我所知,必须创建一个新的字符串对象,然后必须将 s 的值复制到其中。
我还认为参数 s 可以而且应该是字符串指针而不是字符串对象(以防止发生不必要的复制)。如果我是对的,那么构造函数应该如下所示,对吗?
Name::Name(std::string &s) { ... }
在这种情况下,传入名称时不需要做任何特别的事情吗?IE。
Name n = new Name("Cody");
完全有效吗?实际上我不确定,因为据我所知,“Cody”是一个常量字符串或类似的东西。
因此,如果我都走在正确的轨道上,那么实际复制价值的正确方法是什么?我认为这是合适的,但我不确定。
#include "Name.h"
Name::Name(std::string s)
{
name = new string(s);
}
提前感谢您的帮助,我知道这是一个基本问题,但我正在慢慢步入 C++ 世界。:) - 科迪