C++基础 构造函数相关的问题。。。
先贴上代码~:
#include <iostream> using namespace std; class A { public: A() { i=1; } A(int t) { i=t; A(); } void print() { cout<<i<<endl; } private: int i; }; int main() { A a; a.print(); A b(2); b.print(); }
猜猜输出什么?
如果你觉得是1 1的话,恭喜你,继续看下去吧。
输出的是1 2,构造函数A(int t)中的A()函数并不能改变i的值。
换句专业点的,构造函数不可以调用类中的其他构造函数完成初始化。虽然调用它会执行,但是无法对成员变量进行初始化,理由是两个构造函数不是同一个this指针。
作为一个自认为C++学的还不错的人,我竟然还一直以为这样很合理。。。
打这里例子是因为最近写的一个程序出了问题,问题的原因就是上面这个。。。
因为这个例子,又想到如果基类中有多个构造函数,子类调用的是哪一个?才发现C++有处理的方式,即像初始化成员变量那样调用基类构造函数即可,如下:
#include <iostream> using namespace std; class A { public: A() { i=1; } A(int t) { i=t; } int get() { return i; } private: int i; }; class B:public A { public: B() { } B(int t):A(t) { } }; int main() { B b(2); cout<<b.get()<<endl;; }
如果在同一个类中,构造函数需要完成类似的成员初始化,可以另写一个专门初始化变量的函数。