C++ 基本知识点回顾

一、继承的一些特性
1、
class animal
{


};
class fish :public animal
{
};


2、
私有成员不能被继承
保护成员能继承(但它存在有着私有成员的性质,不能使用对象直接访问,子类的成员函数可以访问它)
公有成员,也能被对象直接访问。
3、
公有继承:私有成员不能继承,其他成员保持原来的特性
保护继承:私有成员不能被继承,其他成员变为protected
私有继承:私有成员不能被继承。其他成员变为private
4、
构造子类的对象会先调用父类的构造函数。
同样对象的生命周期结束,也会调用父类的析构函数。
5、
当设计类的时候,编写了构造函数,编译器不会提供默认的构造函数。当没有编写构造函数,系统便会提供默认的构造函数。
6、实例化一个子类的对象,需要调用父类的构造函数,当父类的构造函数是带参数的,可以用如下方法(初始化列表的方法)设计子类的构造函数
class animal
{
animal(int x,int y)
{
}
};
class fish :public animal
{
fish():animal(400,300)
{
}
}
7、继承中函数的覆盖(不同于函数重载):父亲和儿子在做相同的事情有时候会选择不同的手段和方法的。
函数的覆盖发生在是父类和子类之间,发生在不同的作用域之间。
函数的重载发生在同一个作用域之间,发生在同一个类里面。
二、多态的一些特性(当C++编译器在编译的时候发现一个类的成员函数是virtual形式的,这个时候C++会采用迟绑定技术,在运行时,依据对象的类型来确定调用哪个函数)
1、
class animal
{
animal(int x,int y)
{
}
void breath()
{
cout<<"animal breath";
}
};
class fish :public animal
{
fish():animal(400,300)
{
}
void breath()
{
cout<<"fish bubble";
}

}
void main()
{
fish f;
animal *p;
p=&f;
p->breath
}
@在上面的例程中程序输出的结果是”animal breath“。这是因为子类在构造对象f时,他会先调用父类的构造函数,然后再在接下来连续地内存空间中添加子类的成员,因此this指针同时
this指针    |       |
|animal |animal的内存空间
|-------|                    fish的内存空间
|fish   |
|-------|
@当我们在animal的成员函数breath前面添加virtual时,这时候就会调用fish的breath。输出为”bubble“。
2、总结:
当我们在父类的成员函数前面加了virtual时候,子类有的调用子类的,子类没有的调用父类的,但是前提条件是,传递的是子类对象的地址。
3、纯虚函数
@纯虚函数 virtual breath()=0;没有函数体
@含有纯虚函数的类叫做抽象类,他是不能实例化对象的。从抽象类派生的类也是抽象类,不能实例化一个对象。除非该派生类将纯虚函数实现了。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值