1,
因为小时分钟秒是在private里面的,无法直接访问。
表示了函数封装的标准步骤。
#include<iostream>
using namespace std;
class Clock {
private:
int hour, minute, second;
public:
Clock(); //声明无参构造函数
//两者最好都有。
Clock(int newH, int newM, int newS); //声明构造函数
//内联函数,设置属性的值
void setHour(int hour) {//函数名称set加属性名
this->hour = hour;//外面传入的赋值给属性hour
}
void setMinute(int minute) {
this->minute = minute;
}
void setSecond(int second) {
this->second = second;
}
//获得属性的值
int getHour() {
return hour;
}
int getMinute() {
return minute;
}
int getSecond() {
return second;
}
void display() {
cout << hour << ":" << minute << ":" << second << endl;
}
};//都写在类声明的里面。
//定义无参构造函数,给hour,minute,second赋初值为1
Clock::Clock() : hour(1), minute(1), second(1) {
}
//定义有参构造函数,给hour,minute,second赋初值为传入的参数值
Clock::Clock(int newH, int newM, int newS) : hour(newH), minute(newM), second(newS) {
}
/*定义无参构造函数的第二种等价写法:(推荐)
Clock::Clock() {
this->hour = 1;//当前的属性赋值为1.
this->minute = 1;
this->second = 1;
}
*/
/*定义有参构造函数的第二种等价写法:(推荐)
Clock::Clock(int hour, int minute, int second) {
this->hour = hour; //将传入的hour的值赋给hour属性(用this->hour表示)
this->minute = minute;
this->second = second;
}
*/
int main() {
Clock myClock1; //定义对象,此时会自动调用无参构造函数
//myClock1.hour = 5;
cout << "利用无参构造函数创建的时间对象为:";
myClock1.display();
Clock myClock2(8, 3, 30); //此处将自动调用有参构造函数
cout << "利用有参构造函数创建的时间对象为:";
myClock2.display();
myClock2.setHour(21);
cout << "修改过的对象的时间为:";
myClock2.display();
return 0;
}
//封装的改变
//{
// myClock.hour = 5; (NULL)
// hour = myClock.hour; (NULL)
// 操作变了
// hour = myClock.getHour();(ok)
// myClock.setHour(5);(ok)
// }
// 好处
//
//{如果我们要隐藏studentid域 实现数据域的保护
// 不希望被读取,(防止越权访问)
// 1,用private声明这个数据
// 2,不要定义getstudentid函数 (如果希望数据不被读)
// ///
// 如果希望被读修改定义setstudentid函数
//
// 2.限制私有的特性改变产生的连锁反应。(健壮性)
// 因为规定了唯一访问studentid的方式-》getstudentid函数访问,属性是私有的。
// 一个信息隐藏是好,未来被修改的可能就越大,属性被藏起来了,就是黑瞎子。
// 3,保持数据完整性。
// 私有的函数可以被类里面的函数调用,当main都里不能直接修改
// 这代表假如我要对用户输入进行读入不会直接读入,(而是通过一次过滤类里面函数的过滤,再在类里面去调用私有函数)。
//}