C++学习手记(二)——类的继承与派生
陈根发
由于类与对象的存在,使得C++变得具有更强大的生命力,这也是C++产生的原因之一。但是C++面对对象的魔力到底在那呢?昨天开始我逐渐感觉出来了!那就是类三大特性——封装,继承和多态,下面我就学习学习继承吧!
类具有强大的继承与派生功能,使得使用C++的程序员可以大大提高程序代码的重用率,举个例子说明:
还是以“我”为一个类。
Class me{
Private:
Char Name[10];
Int age;
Char sex;
}
当我要申明一个“他”的类时,因为那些数据成员都是相同的,所以我们完全可以利用“我”来做基类,派生出“他”,派生的申明方法为
class 派生类名:派生方式 基类名{
//派生类的数据成员和成员函数
}; //注意,要以 ;结束
那么派生方式主要又有那些呢?一是私有派生,关键字为 private,二是公有派生,关键字为public 。那么,两种不同的继承方式有会有什么不同结果呢?还是先看一个例子吧!
#include<iostream.h>
class base{
int x;
public :
void setx (int n)
{x=n;}
void showx()
{cout <<x<<endl;}
};
class derived:private base{
int y;
public:
void setxy(int n,int m)
{setx(n);
y=m;}
void showxy()
{cout<<x<<y<<endl;} //非法,私有派生类不能直接引用基类的私有成员
};
main()
{
derived obj;
obj.setxy(10,20);
obj.showxy();
return 0;
}
运行错误!VC++提示的错误信息为error C2248: 'x' : cannot access private member declared in class 'base' see declaration of 'x'
这到底是怎么回事呢?只是因为私有派生类不能直接引用基类的私有成员。C++对派生的规定是:
在公有派生情况下,基类中的所有成员的访问特性在派生类中维持不变;在私有派生情况下,基类中的所有成员在派生类中也成为私有成员。
这就是出错的原因,由于x 是基类中是私有成员,在私有派生中,基类中的私有成员不能被派生类成员访问。我们只要在出错的地方改为:
showx();cout<<y<<endl;
这下我们就可以看到结果:
10
20
不知道我是不是写的很明白,自己认为,现在应该可以得出类的继承和派生特性:
1. 在私有派生中,基类中的私有成员在派生类中私有继承。所有的公有成员都只能成为私有派生类的私有成员,这些成员可以被派生类的成员函数使用,但是基类中的私有成员不允许被派生类的成员函数使用。
2. 在公有派生中。基类成员的可可访问性在派生类中维持不变!
3. 在公有派生情况下,基类中的所有成员的访问特性在派生类中维持不变;在私有派生情况下,基类中的所有成员在派生类中也成为私有成员。
好了,继承与派生就到这里吧。明天我要学习类的多态了。
————————————————————————————————————
为做一个百分百的程序员而奋斗!
个人说明:农民的儿子,或者说就是农民!二○岁以前过着平庸的生活,二○岁 以 后也不想传奇。
穷是二十年的主打歌,劣质的大衣,带洞的牛仔,不是卖酷,而是现实所逼。一年吃的饭<=365*2。1.5元一餐占80%。2.5元一餐占19.9%,大餐偶尔(6元以上),都是同学聚会,或是生活补贴发放之时!
郁闷时抽烟,袋烟!(城里人没有见过),3.5元一斤,烟起之时,举室皆惊,顾及旁人兄弟,不敢常抽。
偶尔喝酒,不求醉否,只求尽兴!每喝,兄弟代付酒钱!
爱好写,或是代码,或是心情文字,或是打油诗,即兴则书,从不收藏(代码例外)。
自小在将军县长大,耳染目睹,有所感染。兄弟有难,总是一马当先,加上乡下孩子吃苦耐劳,所以很少会输。
自认颇具毅力,50元第一次出远门,为了我的大学;200元逛厦门,为了生计;徒步20公里,为了省2元公交。
娱乐的主要活动是上网,不喜欢玩游戏,不喜欢耍MM,经常发帖。网友甚少,有则知心。
喜欢三句话,都是网友所赐:
1. 上天不会辜负任何人,你付出多少,就会得到多少!(自我安慰)
——herry
2. 事业第一,爱情第二(自我勉励)
——阿当
3. 只要过程正确,结局一定会好(自我警告)
——陈忠
2003-12-23