/*
目的:
以前学过C++,但是现在全忘了。现在想把C++主要的知识点包含在一段程序里面
这样以后在要用C++的时候,可以轻松的上手,不会连一些C++基本的概念都忘了
*/
#include<iostream>
using namespace std;
class Clock //类名 时钟类
{
public:
Clock(){} //默认构造函数,建立无参对象时调用
Clock(int, int, int); //带参构造函数,建立带参数对象时调用。
//这里要说明的是,类的构造函数可以有多个,但析构函数只能有一个
Clock(Clock& k){} //拷贝构造函数,当通过对象赋值调用,这里还涉及到浅拷贝和深拷贝(就是是否真正拷贝对象的资源)
~Clock(){} //析构函数,对象结束时调用,主要用来释放对象申请的资源。建议析构函数前加上virtual
//一般在构造函数中用 new在堆中申请内存,在析构函数中用 delete释放
void setTime(int, int, int); //成员函数,设置时间
void showTime(); //成员函数,显示时间
virtual void print(); //虚函数,一般编译的次序是先期联编,申明为虚函数编译器会迟后联编
static int sum;
static int get_sum(){return sum;} //静态成员函数,可以访问静态数据成员,他们都不属于对象,而是属于类的。
private: //静态成员函数的调用形式是: Clock::get_sum();
int H; //私有成员,hour(小时)
int M; //私有成员,minite(分钟)
int S; //私有成员,second(秒钟)
};
int Clock::sum = 0; //静态数据成员必须在类内申明,在类外初始化
void Clock::setTime(int h,int m, int s) //成员函数的实现
{
H = h;
M = m;
S = s;
}
void Clock::showTime() //成员函数实现
{
cout<<H<<":"<<M<<":"<<S<<endl;
}
void Clock::print() //成员函数实现
{
cout<<"This is in class Clock print!"<<endl; //主要用来说明虚函数问题!
}
Clock::Clock(int h, int m, int s) //带参数构造函数的实现
{
H = h;
M = m;
S = s;
}
class AlarmClock:public Clock //类名 闹钟类, 公有继承了Clock,AlarmClock对Clock中的
{ //所有数据成员和成员函数,拥有和Clock一样的权限
public: //protected继承下来的全是protected权限,private继承下来的全是private权限
//这里的权限需要注意,就是在派生类中可以根据权限,对象可以访问public成员
//成员函数可以访问public和protected成员。
AlarmClock(); //默认构造函数
AlarmClock(int,int,int,int,int); //带参数构造函数
virtual void print();
private:
int AH; //私有成员,闹钟小时
int AM; //私有成员,闹钟分钟
};
AlarmClock::AlarmClock(int ah,int am,int h,int m,int s):Clock(h,m,s)
{ //用冒号加类名初始化基类
AH = ah; //这在初始化一个其它类的数据成员时,必须这样做
AM = am;
}
void AlarmClock::print() //成员函数实现
{
cout<<"This is in class AlarmClock print!"<<endl; //主要用来说明虚函数问题!
}
void func(Clock& c1) //这个函数用来说明虚函数问题
{
c1.print(); //如果不申明为虚函数,c1不知道调用基类还是派生类的print();
} //这里可以显示的调用,如 Clock::print();
int main()
{
AlarmClock ac(8,0,7,0,0);
func(ac);
return 0;
}