初始化
1)对象的初始化:
针对Public成员:
# include <iostream>
# include <algorithm>
using namespace std;
//方式一
class Time {
public://不写public则默认为private,那么主函数将无法调用这些属性
int hour;
double minute;
int sec;
};
//方式二
//c++在不断更新的过程中,在类中初始化是正确的,
//虽然说在创建类的时候依旧是没有储存空间的,但是这个初始化的值,
//是当对象创建后(此时已经有储存空间),将这个初始值赋给相应的变量。
class AM {
int hour = 1;
double max_ = 2;
int min_ = 8;
public:
void set_();
void show_() {
cout << hour << endl;
cout << max_ << endl;
cout << min_ << endl;
}
};
void AM::set_() {
cin >> hour >> max_ >> min_;
}
int main() {
//初始化
Time t = { 12,13,14 };
cout << t.hour << endl;
cout << t.minute << endl;
AM am;
am.set_();
am.show_();
AM am1;
am1.show_();
}
运行结果:
第一条红线往上是输出t的hour和minute
第二条红线往上是输入am的三个值,
第三条红线往上是输出am的三个值
最后三个数字是am1最开始被初始化(在类中赋值)的值,
2)使用构造函数初始化数据成员
构造函数的特点:
① 名字与类名相同
②无需用户调用,在建立对象时自动执行
③不返回任何值,不具有任何类型
④ 当没有定义构造函数时,系统会自动生成函数体为空,没有参数,不执行初始化的构造函数,
3)构造函数的类内定义以及类外定义
类内定义:
# include <iostream>
# include <algorithm>
using namespace std;
class Time{
public://这里绝不可以省去,否则定义对象的时候会报错,因为此时的构造函数是私有的
Time() {
hour = 2;
minute = 9;
sec = 33;
}
void show_time();
//不写public则默认为private,那么主函数将无法调用这些属性
private://这里也不可以省去
int hour;
double minute;
int sec;
};
void Time::show_time() {
cout << hour << endl;
cout << minute << endl;
cout << sec << endl;
}
//
int main() {
Time t;
t.show_time();
return 0;
}
运行结果:
类外定义:
# include <iostream>
# include <algorithm>
using namespace std;
//方式一
class Time{
public:
Time();//重点
void show_time();
private:
int hour;
double minute;
int sec;
};
Time::Time() {//类型为Time
hour = 2;
minute = 9;
sec = 33;
}
void Time::show_time() {
cout << hour << endl;
cout << minute << endl;
cout << sec << endl;
}
//
int main() {
Time t;
t.show_time();
return 0;
}
运行结果不变。
特点:
①构造函数时在定义对象是由系统自动执行,且只可执行一次,且通常声明为public。
② 可用类对象初始化另一个类对象,
Time t;
Time t1 = t;
此时是把对象的所有数据成员的值拷贝到t2相应各成员,但不调用t1.time();调用的是默认系统生成的复制构造函数,后面会系统说
③一般构造函数中不包含另外其他语句,以保证程序的清晰,但,写了也不会出现语法错误。