工厂怎么做网站互联网销售是什么意思
//总结:
// this在软件框架或者游戏引擎中实现多态的重要作用:
//this就是指子类对象实体,而不是父类。
// this和上行转换(Node *pObj = new Sprite())一致:;
//1.this指向的多态函数是调用子类的,虚函数内使用的是子类的成员(即使子类重定义了父类的成员)。
//2.this指向的同名函数是调用父类的。
//3.不能调用子类的一般函数。
//4.this指向的数据:是子类的(包括父类继承下来的),子类重定义了由于同名隐藏则是父类的(虚函数中还是this,还是main外部调用都一样),子类特有部分数据访问不到。
//下行转换(Sprite *pObj = static_cast<Sprite*>(new Node())):
// 5.虚函数是父类的。虚函数内调用的都是父类的成员(包括数据成员或者函数成员)。
// 6.同名函数是子类的。
// 7.可以调用子类的一般函数。
// 8.this指向的数据:是父类的,父类中this数据是父类的,子类中this数据是父类的,或者是是子类特有(或者子类重定义)的那么是未初始化的数据。
//(因为下行转换只有父类构造函数调用)。数据成员和一般函数成员一样,有继承特性,同名隐藏特性,指针识别范围特性。
//在设计类继承体系中记得:
//(1)父类中多用this: 因为this代表的是子类的对象实体,可以预先做事情实现调用框架。
//(2)保持虚函数专一:因为在虚函数内部调用的成员,无论是子类重定义的数据成员,还是子类特有的数据成员,亦或者是子类的函数成员都会具有穿透特性。
//(3)子类不要重定义父类中的成员(包括数据成员和函数成员): 否则父类不能正确调用子类的数据和函数成员。
//(4)不要使用下行转换,除非子类没有自己的数据成员,否则很容易访问到未初始化的数据而dump机。
#include <iostream>
using namespace std;
class Node
{
public:
virtual ~Node(){};
{
cout<<"VirtualFunc From Node, m_csFlag :"<<m_csFlag<<",m_nFlag:"<<m_nFlag<<endl;
SameFunc();
}
void SameFunc()
{
cout<<"SameFunc From:Node,m_nFlag is:"<<m_nFlag<<endl;
}
void NodeSpecialFunc()
{
cout<<"NodeSpecialFunc Called"<<endl;
}
void RunAction()
{
this->VirtualFunc();
//this->SameFunc();
}
public:
char* m_csFlag;
int m_nFlag;
};
class Sprite: public Node
{
public:
Sprite(){m_csFlag = "Sprite"; m_nFlag = 2; m_nTestFlag = 3;}
virtual void VirtualFunc()
{
cout<<"VirtualFunc From Sprite, m_csFlag value:"<<this->m_csFlag<<",m_nFlag value:"<<this->m_nFlag<<endl;
SameFunc();
}
void SameFunc()
{
cout<<"SameFunc From:Sprite,m_nFlag is:"<<m_nFlag<<endl;
cout<<"SameFunc From:Sprite,m_nTestFlag:"<<m_nTestFlag<<endl;
}
void SpriteSpecialFunc()
{
cout<<"SpriteSpecialFunc Called"<<endl;
}
public:
int m_nFlag;
int m_nTestFlag;
};
void main()
{
Node *sprite1 = new Sprite();
//Sprite *pSprite = static_cast<Sprite*>(new Node());
cout<<"NameOverride Data:"<<sprite1->m_nFlag<<endl; // 数据成员是父类的
cout<<"Not NameOverride Data:"<<sprite1->m_csFlag<<endl;// 数据成员是父类的
}
// this在软件框架或者游戏引擎中实现多态的重要作用:
//this就是指子类对象实体,而不是父类。
// this和上行转换(Node *pObj = new Sprite())一致:;
//1.this指向的多态函数是调用子类的,虚函数内使用的是子类的成员(即使子类重定义了父类的成员)。
//2.this指向的同名函数是调用父类的。
//3.不能调用子类的一般函数。
//4.this指向的数据:是子类的(包括父类继承下来的),子类重定义了由于同名隐藏则是父类的(虚函数中还是this,还是main外部调用都一样),子类特有部分数据访问不到。
//下行转换(Sprite *pObj = static_cast<Sprite*>(new Node())):
// 5.虚函数是父类的。虚函数内调用的都是父类的成员(包括数据成员或者函数成员)。
// 6.同名函数是子类的。
// 7.可以调用子类的一般函数。
// 8.this指向的数据:是父类的,父类中this数据是父类的,子类中this数据是父类的,或者是是子类特有(或者子类重定义)的那么是未初始化的数据。
//(因为下行转换只有父类构造函数调用)。数据成员和一般函数成员一样,有继承特性,同名隐藏特性,指针识别范围特性。
//在设计类继承体系中记得:
//(1)父类中多用this: 因为this代表的是子类的对象实体,可以预先做事情实现调用框架。
//(2)保持虚函数专一:因为在虚函数内部调用的成员,无论是子类重定义的数据成员,还是子类特有的数据成员,亦或者是子类的函数成员都会具有穿透特性。
//(3)子类不要重定义父类中的成员(包括数据成员和函数成员): 否则父类不能正确调用子类的数据和函数成员。
//(4)不要使用下行转换,除非子类没有自己的数据成员,否则很容易访问到未初始化的数据而dump机。
#include <iostream>
using namespace std;
class Node
{
public:
virtual ~Node(){};
Node(){m_csFlag = "Node"; m_nFlag = 1;};
virtual void VirtualFunc(){
cout<<"VirtualFunc From Node, m_csFlag :"<<m_csFlag<<",m_nFlag:"<<m_nFlag<<endl;
SameFunc();
}
void SameFunc()
{
cout<<"SameFunc From:Node,m_nFlag is:"<<m_nFlag<<endl;
}
void NodeSpecialFunc()
{
cout<<"NodeSpecialFunc Called"<<endl;
}
void RunAction()
{
this->VirtualFunc();
//this->SameFunc();
}
public:
char* m_csFlag;
int m_nFlag;
};
class Sprite: public Node
{
public:
Sprite(){m_csFlag = "Sprite"; m_nFlag = 2; m_nTestFlag = 3;}
virtual void VirtualFunc()
{
cout<<"VirtualFunc From Sprite, m_csFlag value:"<<this->m_csFlag<<",m_nFlag value:"<<this->m_nFlag<<endl;
SameFunc();
}
void SameFunc()
{
cout<<"SameFunc From:Sprite,m_nFlag is:"<<m_nFlag<<endl;
cout<<"SameFunc From:Sprite,m_nTestFlag:"<<m_nTestFlag<<endl;
}
void SpriteSpecialFunc()
{
cout<<"SpriteSpecialFunc Called"<<endl;
}
public:
int m_nFlag;
int m_nTestFlag;
};
void main()
{
Node *sprite1 = new Sprite();
//Sprite *pSprite = static_cast<Sprite*>(new Node());
cout<<"NameOverride Data:"<<sprite1->m_nFlag<<endl; // 数据成员是父类的
cout<<"Not NameOverride Data:"<<sprite1->m_csFlag<<endl;// 数据成员是父类的
sprite1->RunAction();
while(1);}