/*
构造函数的分类
*/
#if 1
class Test
{
public:
//1、无参数构造函数
Test()
{
m_a = 0;
m_b = 0;
cout << "我是构造函数 被执行了" << endl;
}
//2、有参数构造函数
Test(int a)
{
cout << "我是一个参数的构造函数" << "a = " << a << endl;
m_a = a;
m_b = 0;
}
Test(int a, int b) //有参数构造函数 //3种方法
{
m_a = a;
m_b = b;
cout << "有参数构造函数" << endl;
}
//3、赋值构造函数(copy构造函数)
Test(const Test& obj)
{
cout << "copy构造函数也是构造函数 " << endl;
}
~Test()//析构函数
{
cout << "我是析构函数 被调用了" << endl;
}
public:
void printT()
{
cout << "普通成员函数" << endl;
}
private:
int m_a;
int m_b;
protected:
};
void test()
{
{
//调用无参数构造函数,
Test t1;//不要写t1()!!!
//Test t1();// 错误的写法 warning C4930: “Test t1(void)”: 未调用原型函数(是否是有意用变量定义的?)
t1.printT();//使用的时候, Test t1()会出错
cout << "hello..." << endl;
}
//调用 调用有参数构造函数 3种方法
//1括号法
Test t1(1, 2);//调用参数构造函数 c++编译器 自动的 调用构造函数
//2 =号法 (3, 4) 是一个逗号表达式,此时需要注意类中仅有一个参数的成员函数
Test t2 = (3, 4); // = c+对等号符 功能增强 c++编译器 自动的 调用构造函数
Test t3 = (3, 4, 5); //调试看
Test t4 = 33; //调试看
cout << "匿名对象演示" << endl;
//3 手动调用 构造函数 显示的调用 直接调用构造函数会产生匿名对象
//只会调用1次构造函数
//类名 对象名 = 构造函数名(11, 22)
Test t5 = Test(11, 22);//会产生匿名对象,此时匿名对象转正,不会被析构(匿名对象的去和留问题)直接调用有参构造函数完成t5对象的初始化
t1 = Test(11, 22); //会产生匿名对象,此时匿名对象被析构
t1 = t5;//把t5 copy 给 t1 是赋值操作,默认是浅拷贝
/*
Test t5 = Test(11, 22) //对象的初始化
t1 = t5; //对象的赋值
两条语句的 = 是不同的概念
对象的初始化 和对象的赋值 是两个不同的概念
*/
}
#endif
019_构造函数的分类以及对象的三种初始化方法
最新推荐文章于 2023-02-14 15:51:32 发布