C++中结构体和类的内存分配以及成员的调用?

C++中结构体和类的内存分配以及成员的调用?,第1张

在 C++ 中,结构体和类都是用来定义自定义类型的数据结构。它们有一些相似之处,但也有一些区别。

内存分配:

在结构体中,所有成员都是公开的,因此它们在内存中是连续分配的。

类中,成员可以被声明为私有的或保护的,这意味着它们在内存中可能不连续分配。此外,类还可以包含虚函数,这意味着它会有一个虚函数表指针,存储类的虚函数地址。

成员的调用:

在结构体中,可以使用点运算符()或箭头运算符(->)访问结构体的成员。例如:

struct Point {

int x;

int y;

};

Point p;

px = 10;

py = 20;

Point ptr = &p;

ptr->x = 30;

ptr->y = 40;

在类中,可以使用点运算符()或指针箭头运算符(->)访问类的成员。例如:

class Point {

public:

int x;

int y;

};

Point p;

px = 10;

py = 20;

Point ptr = &p;

ptr->x = 30;

ptr->y = 40;

在 C++ 中,可以使用 :: *** 作符来访问类的 static 变量或 static 方法。例如:

class MyClass {

public:

static int s_value;

static void setValue(int value) { s_value = value; }

static int getValue() { return s_value; }

};

int MyClass::s_value = 0;

int main() {

MyClass::setValue(5);

int x = MyClass::getValue();

std::cout << x << std::endl;  // Outputs: 5

return 0;

}

在这个例子中,MyClass 类有一个 static 变量 s_value 和三个 static 方法:setValue、getValue 和构造函数。可以使用 :: *** 作符在类的外部调用这些 static 方法,就像在 main 函数中所示。

请注意,static 变量必须在类的外部定义并初始化。在上面的例子中,static 变量 s_value 被定义为 int 类型并初始化为 0。

还要注意,static 方法不能访问类的非 static 成员。例如,如果 MyClass 类有一个非 static 变量 m_value,则在 static 方法中无法访问它。

很明显这声明的一个A类的指针,不过这个指针指向了B类,就是这么理解,指针本身是A类指针。

访问B类的对象没有问题,访问A类的也没有问题,因为B类由A类派生。

要访问函数的话,那么对于只有B类中存在的函数,直接访问没有问题。

那么对于B类和A类中都存在的函数会这么处理呢,那就要用到虚函数了。

如果函数在基类中时虚函数,那么用p调用函数会指向B类中的对应函数,要是没有在基类中将其定义为虚函数的话,那么无论p指针指向什么位置,函数调用都会调用基类也就是p本身所被声明的类中的函数

额。。楼主适合当哲学家。但是实际上区分到底是包含还是并列并没有实际意义。

所谓的继承只不过是strousp大大定义的一种抽象的概念,具体怎么实现的根据编译器而定。甚至即便是编译器也未必清楚的采用了无名对象亦或是同名对象。反正当一个新的子类对象初始化时,系统会根据它和它的父对象初始化它。

不过在有些情况下把他按照无名对象理解确实可以,比如说在私有继承或保护继承时。

class son :private father son a; 这是其父类的表现更像是son的一个成员变量,也就是你所说的包含而不是融合。

这样的回答满意吗?

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/12183555.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-21
下一篇2023-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存