扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
c++中,有两种class data members:static and nonstatic,和三种class member functions:static、non-static and virtual
目前成都创新互联已为近1000家的企业提供了网站建设、域名、网页空间、网站托管、服务器托管、企业网站设计、静安网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
现有以下class声明:
class Point
{
public:
Point(float xval);
virtual ~Point();
float x() const;
static int PointCount();
protected:
virtual ostream& print( ostream & os ) const;
float _x;
static int _point_count;
}
此 class 可以通过三种object models表示
一个object是一系列slots,每一个slots指向一个member,Members按其声明顺序,各被指定一个slot。每一个data member or function member都有自己的一个slot
目的:尽量减低C++ complier的设计复杂度,但会损失空间和执行器的效率
int (*pq) ();
class A
{
public:
virtual action1();
...
}
class B : public A
{
//以下皆为B独有
public:
...
void rotate();
protected:
enum action2 {...};
int n;
}
B b;
A* p1 = &b;
B* p2 = &b;
显然,我们并不不能用p1处理A以外的members,唯一方法是通过virtual
//以下都可行
(static_cast (p1))->n;
if( B*p3 = dynamic_cast(p1) ) //此为run-time operation,成本较高
p3->n;
p1->action1()
B b;
A a1 = b; //造成sliced
a1.action1(); //调用A中的
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流