c++ 继承/派生、访问属性、构造函数

来源:互联网 发布:私募公募 知乎 编辑:程序博客网 时间:2024/06/05 05:52

1.子类继承父类的继承方式:public,private,protected,不写则默认为private;


2.子类会继承父类的全部成员(除了构造函数、析构函数,虽然析构函数有virtual,但是不是继承的意思),全盘接受,没得选,不能只继承一部分,而不继承另一部分,这样就可能造成数据冗余,在继承时可能会继承了一大堆没用的东西,这个问题目前的c++也无法解决,所以继承时父类的选择要谨慎。但是,可以改变继承的成员在子类中的访问属性,即可能全盘继承了父类的成员之后访问不了!!!


3.父类中的访问属性继承方式子类中的访问属性privatepublic/protected/private不可访问publicpublicpublicpublicprotectedprotectedpublicprivateprivateprotectedpublicprotectedprotectedprotectedprotectedprotectedprivateprivate


4.protected成员在本类内相当于private,但是在子类中就不一样了,子类中可以访问父类的protected成员。若某类声明了protected成员,就说明这个类可能要当作父类,是为了继承做准备的。


5.类外可访问类的public成员,不可访问类的private和protected成员。


6.构造函数是为了初始化类的数据成员,可以不自己定义,这样系统就会自动设置默认构造函数,也可以自己定义。因为构造函数不能继承,所以子类在初始化时要同时初始化父类,一般是在定义子类构造函数时调用父类的构造函数,声明子类构造函数时不用加上父类构造函数。

形式:子类构造函数名(总参数表,即所有参数):父类构造函数名(参数表)

{

    //子类新增成员初始化

}

e.g.student1(int n,string nam,char s,int a,string ad):student(n,nam,s)

{

   //新增成员初始化

}

上述student为父类,student1为子类。

这种方式其实和构造函数的初始化列表是一样的,如

box(int h,int w,int l):height(h),width(w),length(len) { //新增成员初始化 }

其实就是利用初始化表调用父类的构造函数,也可以将两者结合起来,即既有初始化表,也有父类构造函数调用,如

student1(int n,string nam,char s,int a,string ad):student(n,nam,s),age(a),addr(ad) { }

若一个类的数据成员中包括类对象,即对象中的对象,则可用如下方式定义:

student1(int n,string nam,int n1,string nam1,string ad):student(n,nam),monitor(n1,nam1)

...

}

上述monitor为student1中的对象(student类型的)。


7.子类和父类的转换:可以把子类的对象赋值给父类的对象,而不能反过来(没有指针的事)。

指向父类对象的指针也可以指向子类,但是只能访问子类中从父类继承的部分,不能访问子类自己新增的部分。若父类指针指向子类,则指针类型自动转换,由子类转为父类(e.g. father* p=new son;),这样,指针指向的就是子类中的父类部分。


8.类的组合:一个类中的数据成员包含另一个类的对象,类的组合是横向的,说明了是否拥有某一属性。类的继承是纵向的,说明了是否属于某一事物。组合和继承是软件重用的重要方式。

阅读全文
0 0
原创粉丝点击