正如许多书中所提到的,与C++结构和类的区别在于访问控制描述符.因此,我想知道以下陈述是否正确:
C中的struct是unboxed:struct中的成员明显位于分配struct的位置.但是C++中的struct是类似盒子的类型:members/headers位于其他地方,并且分配struct的地方包含指向members/headers的指针.
这种理解对吗?
是否可以在C++中创建一个未装箱的类型,它还包含实例方法?
我有一个任务,我需要将一些Ada代码转换为C++代码,使其尽可能与Ada代码相似.Ada代码如下
type Shape is (Circle, Triangle, Rectangle);
type Colors is (Red, Green, Blue);
type Figure(Form: Shape := Circle) is
record
Filled: Boolean;
Color: Colors;
case Form is
when Circle =>
Diameter: Float;
when Triangle =>
Left_Side: Integer;
Right_Side: Integer;
Angle: Float;
when Rectangle =>
Side_1: Integer;
Side_2: Integer;
end case;
end record;
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用一个class但是根据问题的语言和老师的个性来判断我认为他正在寻找一个struct.我不清楚如何创建一个内部不同情况所需的逻辑struct.老师非常特别,所以我认为需要最小的内存占用.
我是CSc的学生,如果解决方案很简单,请原谅我.谢谢!
更新:所以最终答案比我想象的要简单.
enum Shape {Circle, Triangle, Rectangle};
enum Colors {Red, Green, Blue};
struct Figure {
bool Filled;
Colors Color;
Shape Form; …Run Code Online (Sandbox Code Playgroud) 使用struct我们可以实现以下所有功能class:
唯一的区别是默认访问权限:private为class,public为struct.
为什么我们需要一个班级呢?
结构与C++中的对象和类有何不同?使用对象或结构有任何性能优势吗?
我们可以在C++结构中使用访问说明符 - private和protected- 而不是类吗?
另外,C中是否存在访问修饰符?
我读的怪C++的功能,称为大约一个注入的类名 在这里.
我试过按照简单的程序
#include <iostream>
class test
{
int s{3};
public:
int get_s()
{ return s; }
};
int main() {
class test::test s; // struct test::test s; also allowed. Why???
std::cout<<s.get_s();
}
Run Code Online (Sandbox Code Playgroud)
如果我在main()程序的第一行用struct替换class关键字仍然编译并运行正常.在这里查看现场演示.为什么?我不应该得到编译错误吗?为什么编译好?
我试图说服一个朋友,这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?
我试图通过使用来理解“类型擦除”的行为std::make_shared。基本思想是使用一个类Object来包装一些不同的类,例如类Foo和类Bar。
我编写了以下代码,它确实有效。
// TypeErasure.cpp
#include <iostream>
#include <memory>
#include <string>
#include <vector>
class Base
{
public:
virtual ~Base() {}
virtual std::string getName() const = 0;
};
template< typename T >
struct Derived : Base
{
public:
explicit Derived(const T&& t) : objD(t) {}
std::string getName() const override
{
return objD.getName();
}
private:
T objD;
};
class Object
{
public:
template <typename T>
explicit Object(T&& t)
: objPtr(std::make_shared<Derived<T>>(std::forward<T>(t))) {}
std::string getName() const
{
return objPtr->getName();
}
std::shared_ptr<const Base> objPtr; …Run Code Online (Sandbox Code Playgroud)