C++构造函数中不能调用虚函数
2018-06-17 23:53:21来源:未知 阅读 ()
在构造函数中调用虚函数,并不会产生多态的效果,就跟普通函数一样。
c++ primer 第四版中497页15.4.5构造函数和析构中的虚函数讲到,如果在构造函数或析构函数中调用虚函数,则运行的是为构造函数或析构函数自身类型定义的版本。另外,必须通过基类类型的引用或指针进行函数调用才会发生多态。
相关帖子:http://bbs.csdn.net/topics/390537893
//示例1 #include <iostream> using namespace std; class A { private: int m_a; public: A(int a): m_a(a) {show();} virtual ~A() {}; virtual void show() const {cout << "show a: " << m_a << endl;} virtual void disp() const {cout << "disp a: " << m_a << endl;} }; class B: public A { private: int m_b; public: B(int a, int b): m_b(b), A(a) {} void show() const {cout << "show b: " << m_b << endl;} void disp() const {cout << "disp b: " << m_b << endl;} }; int main() { A* pob3 = new B(100, 200); pob3->disp(); delete pob3; return 0; }
//示例1运行结果 show a: 100 disp b: 200 请按任意键继续. . .
//示例2 #include <tchar.h> #include <iostream> using namespace std; class A { public: A() { cout << "A构造函数"; Test(); } ~A() { cout << "A析构函数"; cout << "A::Test()" << endl; } virtual void Test() { cout << "A::Test()" << endl; } }; class B :public A { public: B() { cout << "B构造函数"; Test(); } ~B() { cout << "B析构函数"; Test(); } virtual void Test() { cout << "B::Test()" << endl; } }; int _tmain(int argc, _TCHAR* argv[]) { A* pA = new B(); cout << "动态调用:"; pA->Test(); delete pA; return 0; }
//示例2运行结果 A构造函数A::Test() B构造函数B::Test() 动态调用:B::Test() A析构函数A::Test() 请按任意键继续. . .
//http://www.cnblogs.com/vcpp123/p/5795421.html
//转载请注明出处 //http://www.cnblogs.com/vcpp123/p/5795421.html
关键词:C++,构造函数,虚函数,多态,重载
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- C++ 转换函数搭配友元函数 2020-06-10
- C++ 自动转换和强制类型转换(用户自定义类类型) 2020-06-10
- C++ rand函数 2020-06-10
- C++ 友元函数 2020-06-10
- C++ 运算符重载 2020-06-10
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash