关于C++的疑问剖析

1)众所周知,抽象类是不存在对象的,只提供接口而不提供实现。但是抽象类能不能作为一个类指针,指向其子类的对象呢?

class Interface {
    public:
    virtual void fun() = 0;
};

class Implement: public Interface {
public:
    void fun() {
        cout<<"This is Implement object."<<endl;
    }
};

int _tmain(int argc, _TCHAR* argv[])
{
    Interface *obj = new Implement();
    obj->fun();
    return 0;
}

  结论:能。抽象类不能拥有自己的类对象,但是,可以定义抽象类指针指向其子类的对象。

2)指向指针的指针  两种最常见的情形:(数组的名字会退化成其首元素的指针。

2.1 指针数组:

class Shape {
public:
    void testFunc() {
        cout<<"Shape::testFunc()"<<endl;
    }
    //...
};

Shape *picture[10];

int _tmain(int argc, _TCHAR* argv[])
{
    Shape **temp = picture;
    Shape *p = *temp;
    p->testFunc();
    return 0;
}

2.2

void scanTo(const char **p, char ch) {
    while (**p && **p != ch) {
        ++*p;
    }
}
int _tmain(int argc, _TCHAR* argv[])
{
    char s[] = "hello, World";
    const char *cp = s;
    scanTo(&cp, ‘,‘);//将指针cp移动第一个“,”出现的位置
    cout<<*cp<<endl;
    return 0;
}

3)

时间: 2024-10-06 05:49:22

关于C++的疑问剖析的相关文章

(转)剖析C++标准库智能指针(std::auto_ptr)

不可否认,资源泄露(resource leak)曾经是C++程序的一大噩梦.垃圾回收 机制(Garbage Collection)一时颇受注目.然而垃圾自动回收机制并不能 满足内存管理的即时性和可视性,往往使高傲的程序设计者感到不自在. 况且,C++实现没有引入这种机制.在探索中,C++程序员创造了锋利的 "Smart Pointer".一定程度上,解决了资源泄露问题. 也许,经常的,你会写这样的代码: //x拟为class: // class x{ // public: // int

[Leveldb源码剖析疑问]-block_builder.cc之Add函数

Add函数是给一个Data block中添加对应的key和value,函数源码如下,其中有一处不理解: L30~L34是更新last_key_的,不理解这里干嘛不直接last_key_ = key.ToString(); 写成 // Update state last_key_.resize(shared); last_key_.append(key.data() + shared, non_shared); assert(Slice(last_key_) == key); 是有什么其他原因吗?

深入剖析Java中的装箱和拆箱

阅读目录 一.什么是装箱?什么是拆箱?二.装箱和拆箱是如何实现的三.面试中相关的问题 自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题.本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱.拆箱相关的问题. 回到顶部 一.什么是装箱?什么是拆箱? 我们知道 Java为每种基本数据类型都提供了对应的包装器类型,至于为什么会为每种基本数据类型提供包装器类型在此不进行阐述,有兴趣的朋友可以查阅相关资料.在Java SE5之前,如果要生成

内存管理_深入剖析volatile关键字

四.深入剖析volatile关键字 在前面讲述了很多东西,其实都是为讲述volatile关键字作铺垫,那么接下来我们就进入主题. 1.volatile关键字的两层语义 一旦一个共享变量(类的成员变量.类的静态成员变量)被volatile修饰之后,那么就具备了两层语义: 1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的. 2)禁止进行指令重排序. 先看一段代码,假如线程1先执行,线程2后执行: //线程1 boolean stop =

RFID消费终端设备安全风险之某高卡破解剖析

之前我们发布了一篇名为"从现实中的案例关注RFID消费终端设备安全风险"的文章,当中提到了关于SAM所带来的一些真实案例.现在我们就接着说一下关于国内RFID黑产的一些案例,从而让大家更加清楚明白SAM的安全的重要性. 在接触RFID安全的时候,认识了一位在国内搞RFID黑产的朋友,从他手中我获得了一份所谓的"*高卡远程破解方法"的文档.所以基于文档的内容我写了这一篇破解过程的剖析. 以下为"**卡远程破解方法"原文以及过程剖析: 1.首先通过R

Tomcat剖析(二)

Tomcat剖析(二) 目录: Tomcat剖析(一):一个简单的Web服务器 Tomcat剖析(二):一个简单的Servlet服务器 这一节基于 <深度剖析Tomcat>第二章: 一个简单的Servlet服务器 总结而成. 上一节,我们了解了一个简单的Web服务器的总体处理流程是怎样的:这一节,我们开始搭建一个简单的Servlet容器,也就是增加实现了servlet的简单加载执行,而不仅仅是将文件内容输出到浏览器上.当然,这一节的servlet的实现是最简单的,用来了解整个Servlet的大

Tomcat剖析(一)

Tomcat剖析(一) 这一节基于 <深度剖析Tomcat>第一章:一个简单的Web服务器 总结而成.写得不好之处,请见谅 对Tomcat而言,如果直接对其源码进行分析是困难的,所以这里被设计得足够简单使得你能理解一个 servlet 容器是如何工作的,没有对Tomcat本身的连接器和容器进行分析,本节旨在明白服务器的整个流程大致是如何进行的.需要知道如何完善Web服务器,可以参考这本书后面的章节,或者等我发表<Tomcat剖析(二)>. 文中细说明是从书中相关章节中copy下来的

DICOM:剖析Orthanc中的Web Server,Mongoose之 Flag bit &amp; Event(三)

背景: Orthanc是本专栏中介绍过的一款新型DICOM服务器,具有轻量级.支持REST的特性,可将任意运行Windows和Linux系统的计算机变成DICOM服务器,即miniPACS.Orthanc内嵌多种模块,数据库管理简单,且不依赖于第三方软件.因此通过剖析Orthanc源码可以学习到搭建DICOM系统中的各个环节,例如SQLite嵌入型数据库.GoogleLog日志库.DCMTK医学DICOM库,以及近期要介绍的开源Web Server,Mongoose. 上一篇博文中简单的分析了M

【安卓笔记】IntentService源码剖析

Service组件想必都不陌生,这里不费口舌了.强调一点,Service组件默认运行在UI线程,所以也是会阻塞主线程的,使用时切记不可在Service中执行耗时操作,而应该创建子线程,异步执行. IntentService类封装了在Service中创建子线程的工作(其实创建的是HandlerThread),我们只需继承IntentService,复写其onHandleIntent方法即可,onHandleIntent方法在子线程中运行,该方法的参数Intent来自onStart或者onStart