C++中构造和析构介绍:
1.C++中的类可以定义与类名相同的特殊的成员函数,
2.与类名相同的成员函数叫做构造函数
3.构造函数在定义时可以有参数,但是没有任何返回类型的声明
4.类中的成员函数可以和普通函数一样进行重载,遵守相同的重载规则。
两个特殊的构造函数:分别是无参构造函数和拷贝构造函数
1.当类中没有定义任何一个构造函数,c++编译器会提供无参构造函数和拷贝构造函数
2.当类中定义了任何的构造函数,C++编译器不会为我们提供无参构造函数,但是拷贝构造函数还会提供
构造函数的调用:
1一般情况下c++编译器会自动调用构造函数
2.在一些情况下则需要手工调用构造函数
#include <iostream> using namespace std; class Test { public: Test(int v) { m_i = v; m_j = v; m_k = v; } void print() { cout << "m_i = :" << m_i << endl; cout << "m_j = :" << m_j << endl; cout << "m_k = :" << m_k << endl; } private: int m_i; int m_j; int m_k; }; int main() { Test t1 = Test(1); Test t2 = 2; Test t3(3); t1.print(); t2.print(); t3.print(); return 0 }
上面 t1,t2,t3三种构造方式在现代C++编译器中没有什么本质区别,后面两个是主动构造,第一个是手动构造。
面试题:问最终i值是多少,
class A { private: static int i; public: A() { i++; cout << "A()count(i)" << i << endl; } A(const A&) { i++; cout << "A(const A&) count(i)" << i << endl; } static void output() { cout << i << endl; } }; A f(A& a) { A aa = a; 调用一次拷贝构造函数一次,此时i=2; return a; //再次调用一次构造函数,赋值给临时对象,此时i=3, } int A::i = 0; int main() { A a; //调用1次无参构造函数,此时i=1, f(a).output(); return 0; }