构造函数分类方式
构造函数三种调用方式
拷贝构造函数调用时机
默认情况下,c++编译器至少给一个类添加3个函数
构造函数调用规则
构造函数分类方式
按参数分为:有参构造和无参构造(默认构造)
按类型分为:普通构造和无参构造
1.括号法 2.显示法 3.隐式转换法
#include拷贝构造函数调用时机using namespace std; class Person { public: Person()//无参构造 { cout << "Person 无参构造函数的调用" << endl; } Person(int a)//有参构造 { age = 10; cout << "Person 有参构造函数的调用" << endl; } Person( const Person &p)//拷贝构造,拷贝出一份一样的,引用的方式传递数据,加const限定它,防止将本体修改 { //将传入的人身上的所有属性,拷贝到我身上 cout << "Person 拷贝构造函数的调用" << endl; age = p.age; } int age; //2.析构函数 ~Person() { cout << "Person 析构函数的调用" << endl; } }; //调用 void test01() { //1.括号法 //Person p1;//默认构造函数 //Person p2(10);//有参构造函数 //Person p3(p2);//拷贝构造函数 //注意事项1:调用默认构造函数时,不要加(),加上(),编译器会认为这是一个函数的声明,不会认为在创建对象 //cout << "p2的年龄为:" << p2.age << endl; //cout << "p3的年龄为:" << p3.age << endl; //2.显示法 Person p1;//默认构造函数 Person p2 = Person(10);//有参构造函数 Person p3 = Person(p2);//拷贝构造函数 //Person(10);//匿名对象 特点:当前行执行结束后,系统会立即回收掉匿名对象,然后执行其他代码 //cout << "aaaaa" << endl; //注意事项2:不要利用拷贝构造函数 初始化匿名对象 //Person(p3);//错误,编译器会认为Person(p3)===Person p3:对象声明 //3.隐式转换法 Person p4 = 10; //相当于 Person p4 = Person(10); 有参构造函数 Person p5 = p4;//拷贝构造函数 } int main() { test01(); system("pause"); return 0; }
1.使用一个已经创建完毕的对象来初始化一个新对象
2.值传递的方式给函数参数传递
3.以值方式返回局部对象
#include默认情况下,c++编译器至少给一个类添加3个函数using namespace std; class Person { public: Person()//无参构造 { cout << "Person 默认造函数的调用" << endl; } Person(int age)//有参构造 { cout << "Person 有参构造函数的调用" << endl; m_age = age; } Person(const Person &p)//拷贝构造 { cout << "Person 拷贝构造函数的调用" << endl; m_age = p.m_age; } int m_age; ~Person() //析构函数 { cout << "Person 析构函数的调用" << endl; } }; //1.使用一个已经创建完毕的对象来初始化一个新对象 void test01() { Person p1(20); Person p2(p1); cout << "p2的年龄为:" << p2.m_age << endl; } //2.值传递的方式给函数参数传递 void doWork(Person p) { } void test02() { Person p;//值传递的方式,会临时拷贝一个副本,不会影响原本数据 doWork(p); } //3.以值方式返回局部对象,局部对象在函数使用完后,会被释放掉 Person doWork2() { Person p1; cout << (int*) & p1 << endl; return p1; } void test03() { Person p = doWork2(); cout << (int*)& p << endl;//p和p1不是同一个对象 } int main() { //test01(); //test02(); test03(); system("pause"); return 0; }
1.默认构造函数(无参,函数体为空;也称空实现)
2.默认析构函数(无参,函数体为空)
3.默认拷贝构造函数,对属性进行值拷贝
1.用户定义有参构造函数时,c++不在提供默认无参构造,但是会提供默认拷贝构造
2.用户定义拷贝构造函数时,c++不会再提供其他构造函数
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)