前言
下面主要讲解c++类 构造函数的两种方式和三种调用方式。
一、两种构造方式
1.有参构造 2.无参构造(如果由系统提供也叫做默认构造).
二、对象的构造
1.无参构造
代码如下(示例):
class Person
{
public:
Person()
{
name = "张三";
age = 18;
}
string name;
int age;
};
这里我们构造一个人时没有传入他的年龄和名字,我们的方法将其默认设置为“张三”和18;
2.有参构造
有参构造又分为传参构造和拷贝构造。
传参构造
传参构造:
Person(string name, int age)
{
this->age = age;
this->name = name;
}
string name;
int age;
通过这种方式我们就可以构造一个我们想要创建的Person对象。 年龄和名字由我们自己初始化。
拷贝构造
拷贝构造是指将一个已有的对象的成员赋值给我们将要创建的对象。
Person(const Person& P)
{
this->age = P.age;
this->name = P.name;
}
string name;
int age;
这里我们是传了一个Person的引用P过来对新构造的对象赋值。 P是我们已经构造好的对象。
三种函数的调用方式
括号法:
下面就是分别用三种构造方法的括号法构造了一位对象。
Person P1;
Person P2("库里", 34);
Person P3(P2);
需注意:无参构造(默认构造)不需要结尾的空括号。原因是编译器会将其看做一个函数的申明而并非一个对象。
显式法
显式法相对比较好理解, 下面就是分别用三种构造方法的显示法构造了一位对象。
Person P1;
Person P2 = Person("库里", 34);
Person P3 = Person(P2);
这里需注意 在第二行的 Person P2 = Person(“库里”, 34); 中的Person(“库里”, 34) 在代码运行时构造了一个匿名对象,在将其拷贝给P2,在该行代码结束以后匿名对象被销毁。 还有不可对匿名对象做拷贝构造,例如
Person P1;
Person P2 = Person("库里", 34);
Person P3 = Person(P2);
Person(P3);
这里我们对匿名对象进行P3的拷贝构造,编译器报错 : P3的重定义 意思就是重新申明P3。
隐式转换法
下面就是分别用三种构造方法的隐式转换法构造了一位对象。
Person P1;
Person P2 = { "库里", 34 };
Person P3 = P2;
小结
这就是有关于c++ 类 基本的 构造函数的两种方式和三种调用方式。 另附: 这是本c++萌新的第一篇文章,如有错误或纰漏请各位大佬不吝赐教。 谢谢。
|