小编Or *_*ser的帖子

怎么用<?扩展SomeObject>而不是<SomeObject>

所以我查看了一些Java代码并偶然发现:

List<? extends SomeObject> l;
Run Code Online (Sandbox Code Playgroud)

基本上这个列表接受SomeObject的某些对象 - SomeObject本身或其继承者.但是根据多态性,它的继承者也可以像SomeObject一样,所以这也可以:

List<SomeObject> l;
Run Code Online (Sandbox Code Playgroud)

那么,当第二个选项明确定义并且几乎相同时,为什么有人会使用第一个选项?

java generics polymorphism

29
推荐指数
1
解决办法
4026
查看次数

为什么我首先要在strcat()之前使用strcpy()?

为什么此代码会产生运行时问题:

char stuff[100];
strcat(stuff,"hi ");
strcat(stuff,"there");
Run Code Online (Sandbox Code Playgroud)

但这不是吗?

char stuff[100];
strcpy(stuff,"hi ");
strcat(stuff,"there");
Run Code Online (Sandbox Code Playgroud)

c cstring

23
推荐指数
2
解决办法
4万
查看次数

我的c风格字符串表现得非常奇怪

我创建了一个String对象,它只包含一个char*字符串; 会员.我通过将成员从我的对象复制到参数的成员而重载operator +,两者都变成了char*变量.但由于某些原因,当我打印结果时,我得到了大约16个添加的giberish字符(转换过载是100%罚款).我把它缩小到char*sum = new char [length]就是问题了.我检查了strlen(sum),它显示等于22,当它应该是6个字母长.任何人都知道问题可能是什么?

String String::operator+(const String& rhs)  
{
    int length = strlen(string) + strlen(rhs.string);
    char* sum = new char[length];
    for(int i=0;i<strlen(string);i++)
        sum[i] = string[i];
    for(int i=0;i<strlen(rhs.string);i++)
        sum[strlen(string) +i] = rhs.string[i];
    String s(sum);



    return s;

}
Run Code Online (Sandbox Code Playgroud)

编辑:现在胡言乱语已经消失了,但我仍然将=附加到我的结果中,例如:"1"+"2"+"3"现在是"1 = 2 = 3".这是null终止符解释错误的结果吗?

再次编辑:没关系,真的很懒,设置[length + 1] ='\ 0'而不是[length].再次感谢您的回答!

c++ pointers c-strings

2
推荐指数
3
解决办法
191
查看次数

标签 统计

c ×1

c++ ×1

c-strings ×1

cstring ×1

generics ×1

java ×1

pointers ×1

polymorphism ×1