c++ 指针-c++基类的二级指针或者指针的引用作为参数的问题

问题描述

c++基类的二级指针或者指针的引用作为参数的问题
class base
{
public:
    base(){}
    virtual ~base(){}
};

class derive : public base
{
public:
    derive(){}
    virtual ~derive(){}
};

void fun1(base*)
{

}

void fun2(base**)
{

}

void fun3(base*&)
{

}

int main()
{
    derive* pDerive;
    fun1(pDerive);
    fun2(&pDerive);   //错误
    fun3(pDerive);     //错误
}

二级指针或者指针的引用不能在函数执行时被强转成基类吗?

时间: 2024-08-17 13:51:08

c++ 指针-c++基类的二级指针或者指针的引用作为参数的问题的相关文章

编程-为什么派生类的指针指向基类对象 还可以调用派生类的函数?

问题描述 为什么派生类的指针指向基类对象 还可以调用派生类的函数? 想不明白啊,高手帮帮忙吧 Derived1 * hh = static_cast(new Base); hh->derivedfunction(); // 这里竟然是可以的 为什么呢 hh指向的是一个基类对象啊?? 而且即使derivedfunction里面用到派生类的私有成员也是可以的, 这到底是为什么啊??? 解决方案 虽然语法上让你通过了,static_cast是强制类型转换,所以语法没办法阻止你错误的做法,但是实际运行结

有关基类指针调用类的虚函数时所遇到的问题

问题描述 有关基类指针调用类的虚函数时所遇到的问题 下列输出中其中一个第2处为什么无法输出相应字符串?并且当类中的输出字符串改为输出int 类型age时又为什么可以? 问题1:问题2: 解决方案 忽视了作用域

c++中基类与派生类中隐含的this指针的分析

先不要看结果,看一下你是否真正了解了this指针? #include<iostream> using namespace std; class Parent{ public: int x; Parent *p; public: Parent(){} Parent(int x){ this->x=x; p=this; } virtual void f(){ cout<<"Parent::f()"<<endl; } void g(){ cout&l

基类指针指向子类对象,调用的成员函数和成员变量是基类的还是子类的?

问题描述 基类指针指向子类对象,调用的成员函数和成员变量是基类的还是子类的? 基类指针指向子类对象,调用的成员函数和成员变量是基类的还是子类的? 解决方案 调用的是基类的.可强制转换回来,才能调用子类的.这就是多态 解决方案二: 这就是动态绑定跟静态绑定的区别. c++中,如果你是虚函数,那么就需要根据实际指针所指的类型来决定调用的方法.这就是多态概念. 如果不是虚函数,那么就是看指针定义的类型,根据类型来调用它的成员函数. 解决方案三: 看是什么方法, 如果是虚方法,那么就是派生类的,否则是基

继承-C++,类模板作为基类派生及指针的问题。

问题描述 C++,类模板作为基类派生及指针的问题. **C++,类模板作为基类派生某几个类,可不可以定义指向基类的指针,然后通过这个指针来指向各个派生类?大家帮忙解答一下.我是初学者,勿喷啊!** 以下面例子为例.C++的. #include<iostream> using namespace std; template<class T1> class A { protected: T1 a; public: virtual void output1(); virtual void

指针-c++接口类的使用,能不能这样用

问题描述 c++接口类的使用,能不能这样用 class xis_socket_observer{ public: virtual ~xis_socket_observer() {} virtual xis_void on_socket_connected(xis_socket* psocket, const xis_cchar* phost, xis_uint port) = 0; virtual xis_void on_socket_disconnect(xis_socket* psocket

Filter组件开发中的SDK基类分析

DirectShow SDK提供了一套开发Filter的基类源代码.基于这些基类开发Filter将大大简化开发过程. 1.CBaseObject 大部分SDK类都从CBaseObject类(参见combase.h)中继承而来的. [cpp] view plaincopy class CBaseObject   {      private:          // Disable the copy constructor and assignment by default so you will

C++:派生类强制转换为基类

在多态的使用时, 派生类的指针或引用可以转换为基类的指针或引用, 即基类的指针可以指向派生类的基类部分; Base* b = Derived* d; b和d指向的内容是相等的, b == d, 因为之间有一个隐式转换即 b == (Base*)d; b和d的地址是不同的 int(b) != int(d), 因为b指向d的基类部分, d指向的是完整的派生类; 但如果进行隐身转换, int(b) != int((Base*)d), 则地址相同. 代码如下: /* * test.cpp * * Cre

《Effective C++》读书笔记07:为多态基类声明virtual析构函数

这个问题在实践中偶尔会碰到,设计一个TimeKeeper基类和一些派生类来记录时间: 1 class TimeKeeper 2 { 3 public: 4 TimeKeeper (); 5 ~TimeKeeper(); 6 7 }; 8 9 class AtomicClock: public TimeKeeper {}; //原子钟 10 class WaterClock: public TimeKeeper {}; //水钟 在使用时,我们可能会使用factory工厂方法: 1 TimeKee