14.1成员函数、对象复制与私有成员
14.1.1类的相关基础
1.类的构成:成员变量以及成员函数;
2.访问类的成员,如果用类的对象来访问,那么则是“对象名.成员名”;如果是对象的指针来访问,那么则是“指针名->成员名”;
3 struct和class的区别:
- struct 和 class 都可以自定义数据类型,也支持继承操作。
- struct 中默认的访问级别是 public,默认的继承级别也是 public;class 中默认的访问级别是 private,默认的继承级别也是 private。
- 当 class 继承 struct 或者 struct 继承 class 时,默认的继承级别取决于 class 或 struct 本身, class(private 继承),struct(public 继承),即取决于派生类的默认继承级别。
tip:建议把只有成员的变量设置为struct;
14.1.2成员函数
成员函数的定义:
class Time {
public:
int Hour;
int Minute;
int Second;
void initTime(int tmphour, int tmpmin, int tmpsec) //成员函数
{
Hour = tmphour;
Minute = tmpmin;
Second = tmpsec;
}
14.2构造函数、explicit与初始化列表
14.2.1
构造函数的写法
class A
{
public:
{
void myfunc()
{
实现代码
}
}
}
//写法2
class A
{
public:
{
void myfunc()
}
}
void A::myfunc()
{
实现代码
}
14.2.2构造函数
1.构造函数在创建类对象时被自动调用;
2.构造函数是为了初始化类的数据成员
构造函数的实现:
Time::Time(int tmphour, int tmpmin, int tmpsec)
:Hour(tmphour),Minute(tmpmin) //这就叫构造函数初始化列表
{
Hour = tmphour;
Minute = tmpmin;
Second = tmpsec;
initMillTime(0);
}
注意事项:1.构造函数无返回值
2.不可手动调用构造函数
3.构造函数是public函数,因为他要被系统调用
4.构造函数如果有参数,那么其在创建对象时也应该有相应的参数
Time myTime = Time(12, 13, 52);
Time myTime2(12, 13, 52);
Time myTime3 = Time{ 12, 13, 52 };
Time myTime4{ 12, 13, 52 };
// Time myTime5 = { 12, 13, 52 };
//Time myTime6(); //这不可以,没参数,可能被编译器误认为是函数声明
//Time myTime7(12, 13); //不可以,缺少参数
14.2.3多个构造函数
一个类可以提供多个构造参数,代表着可以为这个类提供多种创建的方法;
14.2.4函数默认参数
若将构造函数写为如下形式
Time::Time(int tmphour, int tmpmin, int tmpsec=12)
那么可以只传递两个参数给构造函数;
14.2.5隐氏转换和explicit
加上explicit声明表示构造函数必须进行显示转换;