wordpress 插件站,wordpress本地mp3,wordpress 防火墙,合规部对于网站建设的意见首先我们来谈一下初始化列表#xff0c;它其实是对于我们前边构造函数体内初始化的一种补充#xff0c;换一种说法#xff0c;它以后才是我们构造函数的主体部分。 我们先考虑一个问题#xff0c;就是一个类里面有用引用或const初始化的成员变量#xff0c;比如说#xf…首先我们来谈一下初始化列表它其实是对于我们前边构造函数体内初始化的一种补充换一种说法它以后才是我们构造函数的主体部分。 我们先考虑一个问题就是一个类里面有用引用或const初始化的成员变量比如说 在构造函数中我们是不能给c和d进行赋值的因为这两种类型只能在初始化时去赋值在这种情况下我们的初始化列表就有用处了 我首先写一下它的基本用法就是语法所规定的
A(int aa1,int bb2,int cc3):a(aa)//初始化列表初始化,b(bb),c(cc),d(0)
{//函数体内初始化
}这其实就是一个构造函数两个大括号之间的就是我们之前所见过的构造函数在函数体内初始化而上面所加的就是这里要说的初始化列表初始化并且它们是可以混着用的 下面一个问题我如果在初始化列表不显示写比如a成员的初始化那么它还会不会初始化a这个成员变量 答案是会因为初始化列表会初始化所有成员变量即使你不写。为什么呢我们之前是不是说过如果一个内置类型不写构造函数它会被默认初始化为随机值而对于一个没写构造函数的自定义类型则会去调用它的默认构造函数这个过程实际上就是在初始化列表完成的。还有一个现象就是我们会给成员变量缺省值如果没有给构造函数就会按缺省值来这个过程也是在初始化列表完成的 除了这引用和const修饰的成员变量还有自定义类型无默认构造或者说就算有默认构造但是我不想用给的缺省值我想自己传这种情况需要用初始化列表
#includeiostream
using namespace std;
class B {
public:B(int ret1) {_ret ret1;}
private:int _ret;
};
class A {
public:A(int aa 1, int bb 2, int cc 3):a(aa)//初始化列表初始化, c(cc), d(0), r(0)
{//函数体内初始化
}
private:int a;char b;int c;const int d;B r;
};
int main() {A a;return 0;
}那么能不能取消掉函数体呢就是构造函数里的大括号及里面的东西当然不能函数体内可以做一些检查和初始化的工作这是初始化列表做不了的比如说 最后要知道初始化列表初始化的顺序是声明顺序 而不是初始化列表中写的顺序 下面一个例子可以证明一下 就是先用_b初始化_a此时_b还是随机值所以第一个打印随机值 下一个问题就是我们的static修饰成员这里的成员包括成员变量和成员函数我们先来看成员变量 有这样一个问题就是我们想看一下一个类创建了多少个对象我们该怎么做呢我们当然可以创建一个全局变量每当调用构造函数或者拷贝构造时就让它这样是没问题的但假如有多个类呢并且这个全局变量也容易被更改。我们这时用static变量就显得很好了下面先说一下它的声明和定义形式 下面我们就可以写统计一共创建了多少个对象的代码了
class A {
public:A(int ret 1) {_a ret;count;}A(const A aa) {_a aa._a;count;}int getcount() {return count;}
private:int _a;static int count;//声明
};
int A::count 0;//定义
A Func() {A a;return a;
}
int main() {A a;Func();cout a.getcount() endl;return 0;
}我们这里成员变量是私有的可以给一个函数把count的值传出来并且这个函数还有一个好处就是我们无法修改count的值 其实static修饰的成员变量可以看成专属于某个类的全局变量用sizeof计算对象大小时也是不算static修饰的变量的大小的 下面是static修饰的成员函数基本形式像下面这样 调用可以上面这两种方法调用如果不用static修饰第一种调用是不行的并且它是没有this指针的因为用static修饰不管是变量还是函数都像一个专属这个类的全局的一样