export default {
computed: {
...mapGetters('global', ['isUserSignedIn']),
},
watch: {
isUserSignedIn: function (newVal, oldVal) {
if (newVal !== undefined) {
console.log('ok, correct result')
}
}
},
updated() {
this.$nextTick(function () {
// Code that will run only after the
// entire view has been re-rendered
console.log('updated: ' + this.isUserSignedIn)
})
},
created() {
console.log('created :' this.isUserSignedIn)
}
}
}
为什么在创建#include <iostream>
class A
{
public:
A() { std::cout << "A's constructor called\n"; }
};
class B
{
public:
B() { std::cout << "B's constructor called\n"; }
};
class C: public B, public A // Note the order
{
public:
C() { std::cout << "C's constructor called\n"; }
};
int main()
{
C c;
return 0;
}
的新实例时调用了类A
和B
的构造函数?
输出
B's constructor called A's constructor called C's constructor called
答案 0 :(得分:2)
C是从A和B派生的 - 所以在可以执行C的构造函数之前,必须完成A和B的构造函数。如果情况并非如此,则C构造函数不能依赖其基类提供的任何内容。
例如,假设A包含从其构造函数中的数据库创建和归档的项列表。 A的所有实例都可以依赖列表完成,因为构造函数必须在实例可用于其余代码之前完成。但是C也是A - 它的衍生方式与“福特”也是“汽车”的方式相同 - 所以它可能想要访问该列表。构造实例时,会在派生类之前自动调用基类构造函数,以确保在派生构造函数启动时所有内容都已准备就绪。
例如,稍微更改您的代码:
class A
{
public:
A() { cout << "A's constructor called" << endl; }
};
class B: public A
{
public:
B() { cout << "B's constructor called" << endl; }
};
class C: public B
{
public:
C() { cout << "C's constructor called" << endl; }
};
int main()
{
C c;
return 0;
}
你会得到:
A's constructor called B's constructor called C's constructor called
因为基类构造函数在执行派生之前都已完成。
答案 1 :(得分:1)
为什么不呢? C
包含分别为B
和A
的部分,这些部分也需要构建。构造函数是执行此角色的功能。
答案 2 :(得分:0)
为了确保正确初始化类的实例,始终调用基类型的构造函数。如果您没有指定要调用的构造函数(语法:C() : B(), A()
的{{1}}构造函数),则使用默认构造函数。当派生类构建在基类之上时,必须首先构造基类。
在您的情况下,您已为默认构造函数指定了内容,因此这是您实例化C
时运行的代码。