关于this指针测试程序,有一点问题。

Teaerror Teaerror 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
孙鑫的C++教程,里面让自己写一个this指针测试程序,来证明this指针指向的是派生类。我几经修改,终于得到了想要的结果。

//VS2010

#include <iostream>
using namespace std;

class Base;
Base* p;
class Base
{
public:
Base()
{
p=this;
}
virtual void fun()
{
cout<<"Base!"<<endl;
}
};

class Child : public Base
{
void fun()
{
cout<<"Child!"<<endl;
}
};
Child ch;

int main()
{
p->fun();
system("pause");
return 0;
}

//结果是输出"Child!"


有3个小问题要问。
1:这程序最开始最困扰我的地方就是如果不加virtual关键字,那么将会输出"Base!",最开始给我的错觉是如果加了virtual再测试就没有意义了,不过后来又仔细读了程序发现确实是能够证明this指针指向派生类的。不过我的基础有点不牢,想问一下如果基类没有加virtual关键字,子类定义了一个同名的函数,那么程序是如何执行的?
2:Child ch; 为什么一定要用子类生成一个对象?否则会报错。
3:一定要先声明一个Base类(class Base;),然后在用这个类定义一个指针(Base* p;),而如果不写class Base;这条语句,直接把Base* p;放在Base类的定义后面就会报错,为什么。

谢谢啦!
...全文

相关推荐

C++中this指针的用法

this指针只能在类的成员函数中调用,表示当前对象的地址; 这篇文档介绍了this指针的用法、概念; this指针相对简单,只需牢记概念即可。

SSS_369

使用boost::enable_shared_from_this实现一个测试程序

boost库提供的enable_shared_from_this类可以让对象在被shared_ptr管理时获得一个指向自身的shared_ptr,从而方便地解决对象生命周期管理问题。首先,我们需要定义一个类来作为测试的对象。这个类必须是从enable_shared_from_this继承,并且包含一个成员函数,用于返回当前对象的shared_ptr。从输出结果可以看出,shared_ptr成功管理了Test对象的生命周期,同时也证明了enable_shared_from_this的正确使用方法。

NoABug

C++中this指针用法详解及实例

C++中this指针用法详解及实例 概要: 本文简单介绍this指针的基本概念,并通过一个实际例子介绍this指针用于防止变量命名冲突和用于类中层叠式调用的两个用法。 this指针概览 C++中,每个类 对应了一个对象,每个对象指向自己所在内存地址的方式即为使用this指针。在类中,this指针作为一个变量通过编译器隐式传递给非暂存(non-static)成员函数。因为this指针不是对象本身,因此sizeof函数并不能用于确定this指针所对应的对象大小。this指针的具体类型与具体对象的类型以及对象是否被const关键字修饰 有关。例如,在类Employee的非常量函数中,this指针类

weixin_38650516

c语言技术this指针

c语言指针的用法详细解析,是一片很好的文档,很值得一看,吐血推荐

南山牧笛

C++ 中的this指针详解及实例

C++ this 指针详解 学习 C++ 的指针既简单又有趣。通过指针,可以简化一些 C++ 编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的。所以,想要成为一名优秀的 C++ 程序员,学习指针是很有必要的。 正如您所知道的,每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字号(&)运算符访问的地址,它表示了在内存中的一个地址。 this指针是类的一个自动生成、自动隐蔽的私有成员,它存在于类的非静态成员中,指向被调用函数所在的对象。 全局仅有一个this指针,当一个对象被创建时,this指针就存放指向对象数据的首地址。 class Ctest { publi

weixin_38701407
评论 2
收藏 已收藏
分享
返回顶部
Teaerror
C++ 语言 65,214 成员 250,514 内容