C++备考(六)继承

学习没有捷径,但考试有捷径

临近考试,虽然之前对一些概念搞清楚了,但时日一长,很多又模糊了。因此利用整理成章,将知识重拾。
考试的范围如下:

  1. 常量(const、符号、字符串常量、立即数)
  2. 引用和指针
  3. 类的封装和隐藏(静态成员、友元函数)
  4. 类的初始化(初始化方式和顺序)
  5. 类的继承(继承方式、构函列表、多继承)
  6. 类的多态性(函数重载、运算符重载、虚函数、虚函数表)
  7. 类的作用域概念

继承

基类
派生类 继承所有数据成员和函数(除析构和构造)无论属性,友元关系不可继承
面向对象编程语言的两大类型

  • 单继承:只有一个基类,树形
  • 多继承:可以有多个基类,有向图型
class Date
{
public:
 	Date();//constructor
 	void setDate(int, int, int);//set year, month, day
 	void printStandard();
private:
	int year;
 	int month;
 	int day;
};
class Time:public Date
{
public: 
 	Time();//constructor
 	void setTime(int, int, int);//set hour, minute, second
 	void printUniversal();
 	void printStandard(); 
private:
 	int hour;//0-23
 	int minute;//0-59
 	int second;//0-59
};
void Time::setTime(int h, int m, int s)
{
 	if ((h >= 0 && h < 24) && (m >= 0) && (m < 59) && (s >= 0) && (s < 59))
 	{
  		hour = h;
  		minute = m;
  		second = s;
 	}
 	else
  		throw invalid_argument("out of range");
}
void Date::printStandard()
{ 
 	cout << setfill('0') << setw(4) << year << "-" << setw(2) << month << "-" << setw(2) << day << endl;
}
void Time::printUniversal()
{
 	Date::printStandard();
 	cout << setfill('0') << setw(2) << hour << ":" << setw(2) << minute << ":" << setw(2) << second << endl;
}
void Time::printStandard()
{
 	Date::printStandard();
 	cout << setfill('0') << setw(2) << hour%12 << ":" << setw(2) << minute << ":" << setw(2) << second << endl;
}
int main(void)
{ 
 	Time d;
 	try
 	{  
  		d.setDate(2019, 11, 14);
 		d.printStandard();
  		d.setTime(21, 50, 39);
  		d.printStandard();
 	}
 	catch (invalid_argument& e)
 	{
  		cout << "exception: " << e.what() << endl;
 	}
 	Time w;
 	try
 	{
  		w.setTime(25, 29, 39);
 	}
 	catch (invalid_argument& e)
 	{
  		cout << "exception: " << e.what() << endl;
 	}
 	w.printStandard(); 
 	return 0;
} 

运行截图
三种继承方式:

  • 公有继承:私有不可访问,其余可访问,属性不变
  • 私有继承:私有不可访问,其余成为私有属性
  • 保护继承:私有不可访问,其余成为保护属性

继承方式具有传递性

保护成员:可以被自身和派生类的成员函数访问,其余不可

多继承

可能产生二义性

二义性判断:

  • 在检查类型之前
  • 在检查可访问属性之前

引入虚基类,虚函数解决冲突问题

虚基类:定义一次
虚函数:重新定义

发布了30 篇原创文章 · 获赞 2 · 访问量 782

猜你喜欢

转载自blog.csdn.net/cascara/article/details/103075549
今日推荐