标签:操作 str 内存 特点 特殊 span 情况 必须 对象属性
C++中,有一类比较特殊的函数--构造函数,构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。构造函数可用于为某些成员变量设置初始值。
构造函数主要用来在创建对象时完成对对象属性的一些初始化等操作, 当创建对象时, 对象会自动调用它的构造函数。一般来说, 构造函数有以下三个方面的作用:
1) 给创建的对象建立一个标识符;
2) 为对象数据成员开辟内存空间;
3) 完成对象数据成员的初始化。
无论是用户自定义的构造函数还是默认构造函数都主要有以下特点:
1) 在对象被创建时自动执行;
2) 构造函数的函数名与类名相同;
3) 没有返回值类型、也没有返回值;
4) 构造函数不能被显式调用。
由于在大多数情况下我们希望在对象创建时就完成一些对成员属性的初始化等工作, 而默认构造函数无法满足我们的要求, 所以我们需要显式定义一个构造函数来覆盖掉默认构造函数以便来完成必要的初始化工作, 当用户自定义构造函数后编译器就不会再为对象生成默认构造函数。
在构造函数的特点中我们看到, 构造函数的名称必须与类名相同, 并且没有返回值类型和返回值, 看一个构造函数的定义:
#include <iostream>
using namespace std;
class Student
{
public:
Student()//无参数构造函数
{
number = 0;
score = 90;
}
void show();
protected:
int number;
int score;
};
void Student::show()
{
cout<<number<<endl<<score<<endl;
}
void main()
{
Student a;
a.show();
cin.get();
}
执行结果:0
90
在类中的定义的和类名相同,并且没有任何返回类型的Student()就是构造函数,这是一个无参数的构造函数,他在对象创建的时候自动调用,如果去掉Student()函数体内的代码那么它和c++的默认提供的构造函数等价的。
构造函数可以带任意多个的形式参数,这一点和普通函数的特性是一样的!
结构体Point中定义了一个函数,函数名也叫Point,但 是没有返回值。这样的函数称为构造函数(ctor)。
构造函数是在声明变量时调用的,例如,声明Pointa,b(1,2)时,分别调用了Point( )和Point(1,2)。
注意这个构造函数 的两个参数后面都有“=0”字样,其中0为默认值。也就是说,如果没有指明这两个参数的值,就按0处理,因此Point( )相当于Point(0,0)。
“:x(x),y(y)”则是一个简单的写 法,表示“把成员变量x初始化为参数x,成员变量y初始化为参数y”
也可以写成:Point(int x=0,int y=0){this->x=x;this->y=y;}
这里的“this”是指向当前对象的指针。this->x的意思是“当前对象的成员变量x”,即 (*this).x
#include<iostream>
using namespace std;
struct Point
{
int x, y;
Point(int x=0, int y=0):x(x),y(y) {} //这句话是要构造函数并初始化成员
};
Point operator + (const Point& A, const Point& B) {
return Point(A.x+B.x, A.y+B.y);
}
ostream& operator << (ostream &out, const Point& p)
{
out << "(" << p.x << "," << p.y << ")";
return out; }int main()
{
Point a, b(1,2);
a.x = 3;
cout << a+b << "\n";
return 0;
}
标签:操作 str 内存 特点 特殊 span 情况 必须 对象属性
原文地址:https://www.cnblogs.com/aprincess/p/11622099.html