注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

刘邓

每天收获一点点-目标:富足

 
 
 

日志

 
 

C++高级细节(2)  

2012-05-10 19:48:28|  分类: C++编程思想(卷 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
1.下面的代码验证了父类中的私有成员变量无法被子类直接使用,如果要使用则必须在父类中设置取值函数和赋值函数,通过调用相应的函数完成对继承属性的更改

#include<iostream>
using namespace std;
class A
{
protected://若此处设置为private则子类无法直接使用a,必须通过父类的取值函数
int a;
public:
A(int b) {a = b;}
virtual void print()
{
cout<<"A:"<<a;
}
};
class B:public A
{
public:
B(int b):A(b){}
void print()
{
cout<<"B:"<<a<<endl;//此处可以调用父类继承的成员a
}
};

int main()
{
B b(2);
A *aa;
aa =&b;
aa->print();
system("pause");
return 0;
}
//输出B:2


2.纯虚函数
纯虚函数即在基类的虚函数声明后加 = 0
virtual  void walk() = 0;
相当于告诉编译器在基类的VTABLE中为walk函数分配虚函数地址,但是此地址为空,此时这种VTABLE被称为不完VTABLE。
存在任意纯虚函数的类称为纯虚基类,这种类无法创建类的实例对象,当用户试图创建用户实例对象时,编译器将报错。
纯虚基类的目的是为一组类提供公共接口,减少重复的代码编辑

3.纯虚定义
a.纯虚函数是可以有定义的,但是纯虚基类依旧无法创建实例对象
b.纯虚定义的好处:
纯虚函数的定义部分通常被称为公共代码,在多个平行的派生类中如果有一致的行为,比如NPC在没有特殊情况下walk()一样,所有的NPC子类可能有相同的walk()实现,将walk()纯虚函数在父类中实现,子类就不要重复的去实现相同的代码,同时还能满足多态的需求,总之纯虚定义能在保证抽象基类的公共接口的同时提供代码的重用。派生类只要在继承的虚函数体内通过::作用域解析符指定调用父类的虚函数就可以多次使用基类抽象函数的定义
另外的一个好处是:允许我们实现从常规虚函数到纯虚函数的改变,而不要更改以前的代码

virtual void walk() = 0;


void CNPC::walk()

{

//walk()实现

....

....

}


class CNPCSON:public CNPC

{

void walk()

{

CNPC::walk();//在子类和父类行为一直时,很好的重用了父类的定义

}

}


  评论这张
 
阅读(60)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017