C++继承的一点理解
2014-08-23 11:13
218 查看
本人C++刚入门,最近在看C++的继承,感觉越看越糊涂,然后就跑了两段代码(程序员面试宝典里面的变形版)看看,稍微增进了一下理解。
下面把代码贴出来,大家可以跟我一样,先自己想想结果,然后编译一下,看看哪里理解还有偏差。
这个程序的运行结果是10 10
稍微又在前面的程序基础上修改了一下:
答案是2 2
纯虚函数:
再加一点对纯虚函数的理解,今天和同学在讨论,终于明白为什么需要纯虚函数了:在各种封装中,可以把基类的头文件给用户看,用户知道有哪些成员函数可以调用,这些函数都是写作纯虚函数,接着,在派生类中将这些成员函数全部实现,但是这个是用户看不到的,用户知道有这些派生类可以调用,然后有哪些成员函数,就可以了。这样就保证了类的封装性。
在纯虚函数的使用中需要注意的是,如果纯虚函数在派生类中没有全部实现并被覆盖,那么,派生类也还是一个抽象类。
下面把代码贴出来,大家可以跟我一样,先自己想想结果,然后编译一下,看看哪里理解还有偏差。
</pre><pre name="code" class="cpp">#include "stdafx.h" #include <iostream> using namespace std; class A { protected: int m_data; public: int A_data; public : A(int data = 0) { m_data = 0; } int GetData() { return doGetData(); } int doGetData() { return m_data; } }; class B :public A { // protected: // int m_data; public: B(int data=2) { m_data = data; } virtual int doGetData() { return m_data; } }; class C:public B { // protected: // int m_data; public: C(int data=2) { m_data = data; } int doGetData() { return m_data; } }; void main( ) { C c(10); cout<<c.GetData()<<endl; cout<<c.A::GetData()<<endl; return ; }
这个程序的运行结果是10 10
稍微又在前面的程序基础上修改了一下:
#include "stdafx.h" #include <iostream> using namespace std; class A { protected: int m_data; public: int A_data; public : A(int data = 0) { m_data = 0; } int GetData() { return doGetData(); } virtual int doGetData() { return m_data; } }; class B :public A { protected: int m_data; public: B(int data=2) { m_data = data; } virtual int doGetData() { return m_data; } }; class C:public B { protected: int m_data; public: C(int data=2) { m_data = data; } int doGetData() { return m_data; } }; void main( ) { C c(10); cout<<c.GetData()<<endl; cout<<c.A::GetData()<<endl; return ; } // //int _tmain(int argc, _TCHAR* argv[]) //{ // Base a(2); // Derived b(3,4); // a.print(); // b.print(); // b.Base::print(); // // return 0; //}
答案是2 2
纯虚函数:
再加一点对纯虚函数的理解,今天和同学在讨论,终于明白为什么需要纯虚函数了:在各种封装中,可以把基类的头文件给用户看,用户知道有哪些成员函数可以调用,这些函数都是写作纯虚函数,接着,在派生类中将这些成员函数全部实现,但是这个是用户看不到的,用户知道有这些派生类可以调用,然后有哪些成员函数,就可以了。这样就保证了类的封装性。
在纯虚函数的使用中需要注意的是,如果纯虚函数在派生类中没有全部实现并被覆盖,那么,派生类也还是一个抽象类。
相关文章推荐
- c++继承和多态的一点小小的理解
- 对于C++保护继承方式的一点理解
- 更深入一点理解 switch 语句 及 c/c++ 对 const 的处理
- 我对C++中继承的理解
- C++第十二周【任务1】理解基类中成员的访问限定符和派生类的继承方式
- 更深入一点理解switch语句及c/c++对const的处理
- C++第十三周任务-项目一(理解基类中成员的访问限定符和派生类的继承方式)
- 更深入一点理解switch语句及c/c++对const的处理
- [深入理解C++(二)]理解接口继承规则
- 对C++继承,封装,多态的理解
- C++中virtual继承的深入理解
- in c++读后感--理解继承和组合
- C++对象模型的一点理解
- 更深入一点理解switch语句及c/c++对const的处理
- 求C++虚继承的理解
- 深入理解C++数据成员的继承
- 更深入一点理解 switch 语句 及 c/c++ 对 const 的处理
- 更深入一点理解 switch 语句 及 c/c++ 对 const 的处理
- C++继承的一点细节问题
- c++多重继承和虚继承及虚函数深入理解(转)