通常在定义变量时要初始化,在定义类对象时,成员属性并没有得到初始化。
C++
类提供了一种特殊的函数-
构造函数
。
构造函数:其
作用是用来初始化类成员属性
。空类中存在一个
默认的无参数的构造,函数名为当前类名,无返回值(不是void就是单纯啥也没有)。
class CTest{
CTest(){ } //默认无参构造
};
要注意的是写在构造函数函数体内的只是赋值并不是真正的初始化,真正的初始化是写在构造函数的初始化参数列表里面的。
CTest(int b):m_a(10),m_b(b),m_c('c'){
m_a = 20; //赋值
}
构造函数并不需要我们手动调用,在定义对象的时候会自动调用,这个默认的无参构造是编译器给提供的,函数体代码为空,所以在定义对象时虽然调用了,但并没有这正给成员初始化。所以多数情况下需要我们手动重构构造函数。
只要重构了任何的构造函数,编译器将不会再提供那个默认的无参构造了。
一个类中的
构造函数允许存在多个
,他们是
函数重载
的关系,重构的构造函数
可以指定参数
来符合我 们需要的初始化过程。
定义
多个对象可能会执行不同的构造
,这就要看在定义对象时如何指定参数了,会根据参数的类型、数量自动匹配对应的构造,但
一个对象最终只能执行其中一个构造
。
#include<iostream>
using namespace std;
class Cat {
public:
Cat() {
height = 10;
weight = 20;
}
Cat(double w) {
height = 10;
weight = w;
}
Cat(double w, double h) {
height = h;
weight = w;
}
private:
double height;
double weight;
public:
double get_weigth() {
return weight;
}
void set_weigth(double num) {
weight = num;
}
double get_heigth() {
return height;
}
void set_heigth(double num) {
height = num;
}
};
int main()
{
Cat tom;
cout << "猫tom的身高:"<< tom.get_heigth() << "猫的体重:" <<
tom.get_weigth() << endl;//猫tom的身高:10猫的体重:20
Cat tony(5);
cout << "猫tony的身高:" << tony.get_heigth() << "猫的体重:" <<
tony.get_weigth() << endl;//猫tony的身高:10猫的体重:5
Cat marry(5,80);
cout << "猫marry的身高:" << marry.get_heigth() << "猫的体重:" <<
marry.get_weigth() << endl;//猫marry的身高:80猫的体重:5
return 0;
}