我正在尝试复制一个对象,然后对其进行修改,而不更改原始对象。相关的类有:
abstract class Upgrade {}
class Shield: Upgrade
{
public Shield(Shield a) {}
}
Run Code Online (Sandbox Code Playgroud)
问题是当另一个类想要获取“升级”对象但该类不知道它获取哪个对象时。例如:
public void AddUpgrade(Upgrade upgrade)
{
for (int i = 0;i<Aliens.Count; i++)
{
Aliens[i].AddUpgrade(What should i put here?);
}
}
Run Code Online (Sandbox Code Playgroud)
我必须使用复制构造函数,因为我不希望所有外星人共享相同的升级引用,但升级是一个抽象类,那么我应该做什么?
我需要对字符串进行一些操作(比如在某些地方添加字母).我不知道它的大小,取决于输入.
如何定义字符串而不指定其大小?我希望它适应我放在里面的任何内容.
为什么我不能只将空char *方法传递给方法?编译器不允许这样做.
根据答案,我明白我无法创建无限大小的字符串.但是,例如,当我尝试创建char arr[100]并且我的字符串的长度只有8个字符时,当我打印时,arr我得到了更多的字母然后我想要.其中一些甚至不是字符串的一部分.怎么可能?
考虑以下示例:
typedef enum {Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday} Day;
void DoSomething(Day day){
//some code
}
Run Code Online (Sandbox Code Playgroud)
问题是以下代码符合:DoSomething(74).那么如何在DoSomething中查看我的参数真的是一天?(依赖于数字将无法工作,因为如果我改变我的枚举Sunday=7....我希望它也能工作,并且检查if(day==Sunday || day ==...)看起来效率低下).
我有2个关于该代码的问题:
char* word="Hello World";
word[0]='a';
printf("%s",word);
Run Code Online (Sandbox Code Playgroud)
我知道当你创建这样的字符串时,你不能更改字符串,因为它是一个常量字符串,所以我不明白为什么我可以运行这段代码并且没有任何错误(我使用代码块C99)?另一个奇怪的事情是,这个词并没有真正改变,printf仍在打印:"Hello World".
我试图理解为什么代码崩溃:( CodeBlocks C99)
int a;
int **b=0;
*b=&a;
Run Code Online (Sandbox Code Playgroud)
我知道*b的类型是 int*而且&a也是int*所以这里的问题是什么?