C++中,虚函数,引用指针,拷贝复制等知识点总结
2015-09-06 17:13
555 查看
1、父类指针,引用子类对象是,指针调用的成员,如果是非虚函数,则调用的是父类的成员函数(即使在子类中有同名函数),普通成员函数;如果是虚函数,则调用子类中函数,在虚函数表中被子类覆盖了;父类指针只能调用父类中存在的成员,如果调用只在子类中存在的成员会失败(尽管指向的对象是子类对象);
2、虚函数在默认实参时,参数值是在编译时确定的。如果通过父类指针调用虚函数,虚函数参数为父类版本,调用的函数实体为子类实体(包括通过父类中非虚函数中调用了虚函数也是这种情况,即调用非虚函数时,是在父类中,然后在非虚函数中调用虚函数时,则传递父类实参,使用子类函数体)
3、注意区分指针引用和初始化,如果是指针和引用,则内存中包含子类的对象,在调用时满足1的规律,即有时调用的是父类成员有时可以调用子类成员,如虚函数。但是用子类对象初始化父类对象时,则只是调用父类的复制构造函数,将子类对象中属于父类的一部分拷贝过去。仅仅只包含父类成员,所以在调用时,不管是虚函数还是非虚函数都是父类成员。
2、虚函数在默认实参时,参数值是在编译时确定的。如果通过父类指针调用虚函数,虚函数参数为父类版本,调用的函数实体为子类实体(包括通过父类中非虚函数中调用了虚函数也是这种情况,即调用非虚函数时,是在父类中,然后在非虚函数中调用虚函数时,则传递父类实参,使用子类函数体)
3、注意区分指针引用和初始化,如果是指针和引用,则内存中包含子类的对象,在调用时满足1的规律,即有时调用的是父类成员有时可以调用子类成员,如虚函数。但是用子类对象初始化父类对象时,则只是调用父类的复制构造函数,将子类对象中属于父类的一部分拷贝过去。仅仅只包含父类成员,所以在调用时,不管是虚函数还是非虚函数都是父类成员。
#include <IOSTREAM> using namespace std; class Base { public: Base() { //Fuction(); } virtual void Fuction(int a=10) { cout << "Base::Fuction" <<a<< endl; } void testFun() { Fuction(); } void FuctionTest() { cout<<"Base Fuction"<<endl; } }; class A : public Base { public: A() { //Fuction(); } virtual void Fuction(int a=20) { cout << "A::Fuction" <<a<< endl; } void FunctionTest() { cout<<"AFunctionTest"<<endl; } }; // 这样定义一个A的对象,会输出什么? int main() { A a; // Base *b = &a; // a.testFun(); // a.Fuction(); // b->testFun(); // b->Fuction(); Base b(a); b.Fuction(); b.testFun(); b.FuctionTest(); //b->FuctionTest(); return 0; }
相关文章推荐
- 《C++ Primer 第五版》第1周:C++基础入门(第1章至第3章)
- C++入门经典 笔记 (第二十章)使用特殊的类、函数和指针
- 【C++】重载
- C语言判断给定的字符串是否为合法的ip地址
- WinPhone8.1 C++/CX引用C#的DLL陷阱
- C++中const 详解
- C语言点餐系统
- C语言字符串操作常用库函数
- C语言字符串操作常用库函数
- C语言实现strtok与strtok_r
- C++中删除string对象中的某个字符
- C++ STL/functional
- c++ 成员指针函数 实现委托----跨平台实现(复杂)
- Item 22:数据成员应声明为私有 Effective C++笔记
- c++builder XE8 线程 Thread
- C++ 牛人博客(不断更新中...)
- C/C++题目总结【来自牛客网】
- 顺序表的基本操作——C++实现
- c++在vector的遍历
- k近邻算法C++二维情况下的实现