您的位置:首页 > 编程语言 > C语言/C++

C++中,虚函数,引用指针,拷贝复制等知识点总结

2015-09-06 17:13 555 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: