C++Prime读书笔记4
动态绑定
在基类和派生类中使用同一个名字的成员函数,即使原型不同,基类成员也会被屏蔽。
class Base
{
public:
int memcn()
{
cout<<"hello"<<endl;
}
};
class Derived:publicBase
{
public:
int memcn(int i)
{
}
};
void main()
{
Derived d; Base b;
d.memcn(); //comile error
b.memcn();
getchar();
}
要获得动态绑定,必须通过基类的引用或指针调用虚成员,并且虚函数在基类和子类中拥有同一原型,
class Base
{
public:
virtualvoid memcn()
{
cout<<"111"<<endl;
}
};
class Derived1:public Base
{
public:
voidmemcn(int )
{
cout<<"222"<<endl;
}
};
class Derived2:public Derived1
{
public:
voidmemcn(int)
{
cout<<"333"<<endl;
}
voidmemcn()
{
cout<<"444"<<endl;
}
};
void main()
{
Basebobj; Derived1 d1obj;
Derived2d1obj2;
Base*bp1=&bobj, *bp2=&d1obj,*bp3=&d1obj2;
bp1->memcn();
bp2->memcn();
bp3->memcn();
getchar();
}
定义派生类赋值构造函数
如果派生类显示定义了自己的赋值构造函数或赋值操作符,则该定义将完全覆盖默认定义,被继承类的赋值构造函数和赋值操作符负责对基类成分以及类自己成员进行赋值或复制。
Class Base{}
Classe Derived:public Base
{
Public:
Derived(const Derived &d):Base(const Derived &d):Base(d){}
}
注意子类的构造函数将用Base(d),将派生类对象d转换为它的基类部分的引用,并调用基类的赋值构造函数,如果省略了基类的初始化函数,如下所示:
Derived(Derived &d){};
这样运行Base的默认构造函数初始化对象的基类部分
补充:软件开发 , C++ ,