#include "iostream"
using namespace std;
using namespace std;
//构造函数
class Parent
{
public:
Parent(int a = 0)
{
this->a = a;
print();
}
virtual void print()
{
cout << "我是 嗲" << endl;
}
protected:
private:
int a;
};
class Child :public Parent
class Parent
{
public:
Parent(int a = 0)
{
this->a = a;
print();
}
virtual void print()
{
cout << "我是 嗲" << endl;
}
protected:
private:
int a;
};
class Child :public Parent
{
public:
Child(int a = 0, int b = 0)
{
this->b = b;
}
virtual void print()
{
cout << "我是儿子" << endl;
}
protected:
private:
int b;
};
void playobj(Parent *base)
{
base->print();
}
void main()
{
//创建一个子类对象,在这个过程中 ,
// 在父类构造函数中调用虚函数print能发生多态吗?
// ----------不会-----------
public:
Child(int a = 0, int b = 0)
{
this->b = b;
}
virtual void print()
{
cout << "我是儿子" << endl;
}
protected:
private:
int b;
};
void playobj(Parent *base)
{
base->print();
}
void main()
{
//创建一个子类对象,在这个过程中 ,
// 在父类构造函数中调用虚函数print能发生多态吗?
// ----------不会-----------
Child c1; //1 要初始化c1.vptr指针,初始化是分布的
// 2 当执行父类的构造函数时,c1.vptr指向父类的虚函数表
// 当父类的构造函数运行完毕后,会把c1.vptr指向子类的虚函数表
// 3 子类的c1.vptr指针分布完成
// 2 当执行父类的构造函数时,c1.vptr指向父类的虚函数表
// 当父类的构造函数运行完毕后,会把c1.vptr指向子类的虚函数表
// 3 子类的c1.vptr指针分布完成
system("pause");
return ;
}
本文探讨了C++中构造函数与虚函数结合使用时的行为特性,特别是关注父类构造函数中调用虚函数是否会发生多态的现象,并通过具体代码示例说明了这一过程。

3448

被折叠的 条评论
为什么被折叠?



