类型转换
-
公有派生类对象可以被当做基类的对象使用,反之则不可。
-
派生类的对象可以隐含转换为基类对象;
-
派生类的对象可以初始化基类的引用;
-
派生类的指针可以隐含转换为基类的指针。
-
-
通过基类对象名、指针只能使用从基类继承的成员。
类型转换规则举例
以上结果是均调用base1的display()函数
不要重新定义继承而来的非虚函数
派生类的构造函数
默认情况下
-
基类的构造函数不被继承;
-
派生类需要定义自己的构造函数
C++规定
-
可以用using语句继承基类构造函数;
-
但是只能初始化从基类继承的成员。
-
语法形式:
-
using B::B
-
若不继承基类的构造函数
-
派生类新增成员:派生类定义构造函数初始化;
-
继承来的成员:自动调用基类构造函数进行初始化;
-
派生类的构造函数需要给基类的构造函数传递参数。
单继承时构造函数的定义语法:
-
派生类名::派生类名(基类所需的形参,本类成员所需的形参):基类名(参数表),本类成员初始化列表
{
//其他初始化;
};
#include<iostream>
using namespace std;
class B{
private:
int b;
public:
B();
B(int i);
~B();
void print() const;
};
B::B(){
b = 0;
cout<<"B的默认构造函数"<<endl;
}
B::B(int i){
b = i;
cout<<"B的带参数构造函数"<<endl;
}
B::~B(){
cout<<"B的析构函数"<<endl;
}
void B::print() const{
cout<<b<<endl;
}
class C:public B{
private:
int c;
public:
C();
C(int i,int j);
~C();
void const print();
};
C::C(){
c = 0;
cout<<"C的默认构造函数"<<endl;
}
C::C(int i,int j):B(i){
c = j;
cout<<"C的带参构造函数"<<endl;
}
C::~C(){
cout<<"C的析构函数"<<endl;
}
void const C::print(){
B::print();
cout<<c<<endl;
}
int main(){
C obj(5,6);
obj.print();
return 0;
}
B的带参数构造函数
C的带参构造函数
5
6
C的析构函数
B的析构函数