struct 很重要的东西之一
构造函数
struct A
{
public:
A(){};//无参构造函数 你不写 任何构造函数时 也是编译器默认会添加一个无参构造
A(int a){};//有参构造函数
}
构造函数:
在实例一个对象时 都会使用(必须)一个构造函数 进行该对象的初始化工作
如
int main()
{
A a;//实例一个A类型名为 a 的对象变量 使用的是 无参构造函数
A a1(100);//实例一个A类型名为 a1 的对象变量 使用的是 有参构造函数 A(int a)
A* pa = new A();// 或者 new A 在堆空间 实例一个A类型对象变量并返回地址 使用的是 无参构造函数
A* pa1 = new A(100);// 在堆空间 实例一个A类型对象变量并返回地址 使用的是
有参构造函数 A(int a)
}
构造函数 也就是 定义变量时 调用的函数 通常我们在里面做 该类型变量的初始化工作
所以也就是说 你要定义这个类型的变量 必须有一个构造函数且是public 的 不然没有办法 去定义
如
struct A1
{
protected://注意!!!
A1(){};//无参构造函数 你不写 任何构造函数时 也是编译器默认会添加一个无参构造
A1(int a){};//有参构造函数
public:
A1(const char* a){};
}
int main()
{
A1 a;//error 无法为该类型实例变量 因为 无参构造函数是 protected 外部无权访问
A1 a1(100);//error 无法为该类型实例变量 因为 有参构造函数是 protected 外部无权访问
A1* pa = new A1();// 或者 new A1 在堆空间 error 无法为该类型实例变量 因为 无参构造函数是 protected 外部无权访问
A1* pa1 = new A1(100);// 在堆空间 error 无法为该类型实例变量 因为 有参构造函数是 protected 外部无权访问
A1 a2(“OK”);//ok 定义栈空间变量
使用有参构造函数 A1(const char* a)
A1* pa2 = new A1(“OK”);//ok
在堆空间 实例一个A1类型对象变量并返回地址 使用的是
有参构造函数 A1(const char* a)
}
现在有个问题 既然我们通常在构造函数内进行初始化工作 那么 我在构造函数里面 主动使用 return; 那么 是否创建了这个对象呢?还是说对象创建失败了?
如
struct A2
{
private:
int a;
int a2;
public:
A2(int b,int&c)
{
a = b;
return;
a2 = c;
}
}
//main 函数中
A2 b(100,99);//b是否被创建了?
答案是 当然被创建了
只是 b 中的 a = 100 a2 = 0
初始化工作没完全完成而已
这种对象 我们称为 不完全对象
至于如何 避免这种情况 构造完全对象
那就得使用 二阶构造的概念
提示一下大家
静态成员函数 变量 可以通过
类型 :: 变量或函数 访问到
无需通过一个实例对象 (前提是 访问修饰符是public 否则外部无权访问)