您的位置:首页 > 编程语言 > C语言/C++

C++ 构造函数

2015-10-08 13:59 405 查看
栈区:int x = 0; int *p =NULL;        (系统会自动回收)
堆区:int *p = new int[20];                 delete回收
全局区:存储全局变量和静态变量
常量区:string str = "hello";
代码区:存储逻辑代码的二进制      ( 编译之后代码)
类被实例化之前是不会占用堆或栈中内存的

对象的初始化

1.有且仅有一次的初始化

2.根据条件的初始化

构造函数

对象实例化时自动调用

构造函数的名字与类名同名

构造函数没有返回值

构造函数可以有多个重载形式

实例化对象时即使有多个构造函数也只调用一个

当用户没有定义构造函数时,编译器自动生成一个默认构造函数

默认构造函数

一个类可以没有默认构造函数,有别的构造函数也可以实例化

构造函数初始化列表

初始化列表先于构造函数执行,先赋值再执行构造函数中的代码

初始化列表只能用于构造函数

初始化列表可以同时初始化多个数据成员

class Circle()
{
public:
Circle(){m_dPi = 3.14;}  //错误,因为const修饰的m_dPi不能二次被赋值
private:
const double m_dPi;
};

class Circle()
{
public:
Circle():m_dPi(3.14){}  //正确
private:
const double m_dPi;
};

拷贝构造函数

拷贝构造函数不能重载

#include <iostream>
#include <string>
using namespace std;

class Teacher
{
public:
Teacher(string name = "Jim", int age = 1);
Teacher(const Teacher &tea);
void setName(string name);
string getName();
void setAge(int age);
int getAge();
private:
string m_strName;
int m_iAge;
};

void test(Teacher t)
{

}

int main() {

Teacher t1;
Teacher t2 = t1;     //调用拷贝构造函数
Teacher t3(t1);      //调用拷贝构造函数
test(t1);            //调用拷贝构造函数

return 0;
}

Teacher::Teacher(string name, int age):m_strName(name), m_iAge(age)
{
cout << "Teacher(string name, int age)" << endl;
}

Teacher::Teacher(const Teacher &tea)
{
cout << "Teacher(const Teacher &tea)" << endl;
}

void Teacher::setName(string name)
{
m_strName = name;
}

string Teacher::getName()
{
return m_strName;
}

void Teacher::setAge(int age)
{
m_iAge = age;
}

int Teacher::getAge()
{
return m_iAge;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++