我正在制作国际象棋游戏,我希望有一系列作品.
如果我是对的,在Java中你可以拥有一个抽象Piece类并拥有King或Queen扩展该类.如果我做的阵列Piece的I可以放置一个King数组中的一块地方和Queen在另一个地方,因为这两个部分King和Queen延伸Piece.
有没有办法用C++中的结构做到这一点?
是否有兴趣将类作为结构转发,反之亦然?这似乎是完全合法的,但存在一些用例?
struct Bar;
class Foo
{
Bar * bar_;
};
class Bar
{
};
Run Code Online (Sandbox Code Playgroud) 我最近在一次采访中遇到了一个问题。
C++ 结构体和类在内存方面有什么区别?
我知道它们在所有方面都是相同的,除了继承时的访问说明符&在成员变量的情况下。
除此之外,内存方面是否存在真正的差异(可能是内存分配或销毁或内存管理等)???
编辑:我不太确定为什么面试官在没有区别的情况下问这个问题。我在这里发现了类似的问题 ,请参阅该链接的第二条评论,他问了同样的问题,但没有答案。我想应该是有区别的。
提前致谢。
在C ++中声明类指针变量时,何时以及为什么我们应该使用'struct'关键字?
我已经在嵌入式环境中看到了这一点,所以我怀疑这是C的一种保留。我已经看到了很多有关在声明struct对象时何时使用'struct'关键字的解释,因为它与C中的名称空间相关(在这里),但是我找不到任何人在谈论为什么在声明类指针变量时可能会使用它。
例如,在CFoo.h中:
class CFoo
{
public:
int doStuff();
};
inline Foo::doStuff()
{
return 7;
}
Run Code Online (Sandbox Code Playgroud)
后来在另一个类中:
void CBar::interesting()
{
struct CFoo *pCFoo;
// Go on to do something interesting with pCFoo...
}
Run Code Online (Sandbox Code Playgroud) 我在 Stack Overflow 上读到全局/静态变量被初始化为它们的默认值 ( 0)。
我还在其他地方读到过(不确定),类变量(非静态)也被初始化为0. 这是真的?
具体来说,我想知道我的指针是否默认初始化为nullptr.
我试着在编译g++和clang两者似乎他们初始化nullptr。
#include <iostream>
struct Foo {
int *ptr;
};
int main() {
Foo f;
std::cout << f.ptr;
}
Run Code Online (Sandbox Code Playgroud)
打印:
0
如果只有我的编译器在做,有什么办法可以告诉我的编译器不要这样做(使用一些编译器标志)?
这是一个简单的事情,我不确定它是否可以在C++中像其他语言一样.事物的行为就像它是一个副本,但不是同一个对象.我希望如果这是结构,或其他一些值类型 - 这将是预期的行为,但对于类,我期望这表现得像我正在看"引用",即 - 与数组中的相同对象.我究竟做错了什么?
// Example program
#include <iostream>
#include <string>
class someclass
{
public:
void setn(int n2);
int n=10;
};
void someclass::setn(int n2){
n=n2;
};
int main()
{
someclass moreofthem[5];
someclass my=moreofthem[1];
std::cout << "start value: " << my.n << " as inital\n"; //10
my.setn(2);
std::cout << "new value: " << my.n << " as expected\n"; //2
std::cout << "value in list: " << moreofthem[1].n << " why?\n"; //10?
}
Run Code Online (Sandbox Code Playgroud) 我试图说服一个朋友,这struct只是class现代C++中的一个.经过大量的争论和资源交换(包括一些SO Q&A)后,我想出了一个通过代码证明它的想法,所以我写道:
class A {};
struct B {};
int main()
{
cout << (is_class<A>::value ? "Yes" : "No") << "\n"; // output Yes
cout << (is_class<B>::value ? "Yes" : "No") << "\n"; // output Yes
cout << (is_same<A,B>::value ? "Yes" : "No") << "\n"; // output No ???
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我对第三cout行输出感到惊讶.所以,我现在被困在这里,我不知道我是否正确.
是struct一个class或不?
为什么代码显示两个不同的东西?
更新:
我很清楚struct和class之间有什么区别.令我感到困惑的是答案之间的区别is_class和is_same答案.如果不在这里问我该怎么办?这个网站是为了什么?为什么有些用户倾向于提出问题是没有用的,甚至没有评论来指明它不符合要求政策?
请记住,我们并非所有人都会说流利的英语.并非所有人都有多年的经验.
感谢所有回答或评论的人.
是否总是在 C++ 中class并且struct仅在默认访问说明符上有所不同?或者在某些早期版本中,C++struct更像 C struct?
已经有几个问题让人们询问 C++ 中类和结构之间的区别。引用最多的差异是默认可见性不同。甚至 Stroustrup 似乎也暗示基本没有区别。
我认为我的问题不是重复的,因为我想问一些具体和准时的问题:针对类使用结构体在速度、内存使用或效率方面有任何影响吗?可以基于其中的任何优势来选择一个吗?
作为参考,我正在评估一个人的 C++ 代码,该代码仅使用结构体,我将把它移植到资源有限的 ARM 架构中。
c++ ×10
class ×7
struct ×5
oop ×2
c++98 ×1
elaboration ×1
performance ×1
reference ×1
scope ×1
structure ×1
type-traits ×1
types ×1
variables ×1