我试图理解friend
函数,我发现自己写了以下代码
虽然我已经理解了好友函数,但这段代码给我留下了新的问题:
- 当我没有实例化任何对象时,这个类是如何初始化的
我知道
static
成员由类的所有对象共享,并且在创建第一个对象时初始化为0
- 什么时候变量
base_i
和derived_i
从代码 中被分配到各自的值?
我想它发生在
return derived::derived_i + derived::base_i;
- 如果是这样,是否也会在此时为类的所有其他成员分配内存,特别是在这种情况下
newVar
#include <iostream>
class base
{
private:
static int base_i;
float newVar;
public:
friend int addClasses();
};
int base::base_i = 5;
class derived : private base
{
private:
static int derived_i;
public:
friend int addClasses();
};
int derived::derived_i = 3;
int addClasses()
{
return derived::derived_i + derived::base_i;
}
int main()
{
std::cout<<addClasses()<<std::endl;
}
当我没有实例化任何对象时,这里的类是如何初始化的
你已经初始化了变量的定义:
int base::base_i = 5; // <-- the initialiser
语言实现负责其余部分。
在什么时候变量base_i和derived_i分别从代码
中被赋值?
具有静态存储时间的非局部变量在调用main
之前初始化。
是否还会为该类的所有其他成员分配内存,特别是在这种情况下为newVar分配内存
非静态成员变量的内存是"分配的";当为类的实例分配内存时。您没有在示例程序中实例化类。