相关疑难解决方法(0)

编译时多态和静态绑定有什么区别?

这个链接帮助我理解静态绑定和动态绑定之间的区别?但我很困惑

静态绑定和编译时多态性有什么区别,或者没有区别.

这也引发了对动态绑定和运行时多态性的疑虑?

c++ binding

9
推荐指数
1
解决办法
2万
查看次数

基类的基本多态指针

虽然我已经在c ++工作了一段时间,但直到现在我还没有必要使用多态功能,而且我对它们非常感兴趣.

如果我有一个基类ClassA而另一个ClassB派生自它,我理解我可以拥有virtual成员函数ClassA,当实现时ClassB,ClassB即使该实例指向使用ClassA指针,也会在实例中调用它.如果没有这个virtual关键字,我假设基类实现在使用基类指针时会占上风,但是对从子类实例化的对象进行操作,如果事实上ClassB它有自己的相同函数的实现,那对我来说似乎有问题.在这种情况下被有效地忽略了.

这是对多态行为的正确理解吗?

现在真正的问题是你如何引用ClassB指针是基类.我真的只能想到两种方式:

  1. 在实例化时创建指针,使用返回基类指针的函数,同时使用子类的构造函数实际为子类分配内存.(这样的创建函数有一个共同的名称吗?)
  2. 使用static_cast并转换对象并将其指定给指向基类的指针.

这些是生成基类对象的基类指针的两种主要技术吗?

c++ polymorphism

5
推荐指数
1
解决办法
3676
查看次数

多态和重载之间的区别

我发现多态性和重载有很多定义。

有人说重载是多态的一种。虽然有人说他们不一样。因为重载时只会分配一个函数。而多态性需要为每个重新定义的成员函数分配内存。我真的对此感到困惑。这对我来说有什么解释?

此外,重载是否发生在编译时,而多态性发生在运行时?

c++ parametric-polymorphism

5
推荐指数
1
解决办法
2万
查看次数

在OOP中需要多态性是什么?

我对OOP概念有愚蠢的问题,我们选择多态的原因是什么?

C++中的简单代码:

class Shape{
public:
virtual void draw(){ cout<<"Shape"<<endl;};
};

class Traingle: public Shape
{
public: void draw(){cout<<"Triangle"<<endl;}
};

class Rectangle: public Shape
{
public: void draw (){cout<<"Rectangle"<<endl;}
};

int main(){
Shape *ptr= new Traingle();
ptr->draw();
delete ptr;
return 7;
}
Run Code Online (Sandbox Code Playgroud)

这里ptr-> draw()函数会调用Triangle绘制,如果指向Rectangle然后是Rectangle draw,这是后期绑定.

创建Base类指针并将其指向不同类的必要性是什么?我们可以创建单独的类对象而不需要任何虚函数,并且可以调用whicever.喜欢

int main(){
    Traingle tObj; 
    tObj->draw();
    Rectangle rObj; 
    rObj->draw();
}
Run Code Online (Sandbox Code Playgroud)

基本上做同样的事情;

为什么多态基本上?为什么虚拟?

它有什么需要或者使用这个属性有什么区别?真实案例会有所帮助!!

c++ oop polymorphism virtual

5
推荐指数
1
解决办法
1320
查看次数

可以在C++中完全避免模板吗?

我的问题,在最后一段,需要(在我看来)一些解释性设置.基本上,我想知道你是否可以避免使用模板而不是你创建所有你想成为的模板类而是从一个声明你将要使用的虚方法的基类继承,其中包括一个内存分配函数,当实现时,将返回指向派生(非基础)类型的指针.

BEGIN设置

C++似乎没有"通用基类"的概念,一切都是隐式派生的; 我想这个类定义如下:

class universal_base
{
};
Run Code Online (Sandbox Code Playgroud)

当然,现在我已经定义了它,我可以让我的所有类都来自它.然后,由于多态性,universal_base我传递的任何引用或指针将与模板参数基本相同:

template <typename T>

class C
{
   T &x;
   int f(T &y);
   C(T &z): x(z + 1) {}
};

class C
{
   universal_base &x;
   int f(universal_base &y);
   C(universal_base &z): x(z + 1) {}
};
Run Code Online (Sandbox Code Playgroud)

不同之处在于,在第一种结构中,表达式z + 1不能保证有效; 你只需告诉用户T必须超载operator+.在第二个结构中,我可以添加一个虚拟的运算符universal_base:

// in universal_base
public:
 virtual universal_base& operator+(const universal_base &x) = 0;
Run Code Online (Sandbox Code Playgroud)

并使用typeiddynamic_cast在实现中使争论正确.这样,编写格式错误的代码是不可能的,因为如果你没有实现,编译器会抱怨operator+.

当然,这样就无法声明非引用类型的成员:

class C: public universal_base
{ …
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism templates

4
推荐指数
2
解决办法
1941
查看次数

如果我们可以实例化一个对象并访问该类的成员,为什么我们需要一个指向类的指针?


我在这里有点困惑.如果我们可以实例化一个类的对象并访问成员方法那么为什么指向一个类的指针?它有什么好处吗?我们何时使用指向类的指针,何时实例化它的对象?

谢谢.

c++ oop pointers class visual-c++

3
推荐指数
2
解决办法
4180
查看次数

在基类向量上调用虚函数

我创建了一些代码来重现问题:

#include "stdafx.h"
#include <iostream>
#include <vector>

class A
{
protected:
    int m_X;
public:
    A() { 
        std::cout << "in A ctor" << std::endl; 
        m_X = 0;
    }
    virtual void printX(){ std::cout << "in A " << m_X << std::endl; }
};

class B : public A
{
public:
    B() {
        std::cout << "in B ctor" << std::endl; 
        m_X = 1;
    }
    virtual void printX(){ std::cout << "in B " << m_X << std::endl; }
};

class As
{
public:
    void …
Run Code Online (Sandbox Code Playgroud)

c++ virtual

2
推荐指数
1
解决办法
1997
查看次数

如何使用虚函数在C++中实现多态行为?

我是C++的这些重要功能的新手,我已经在这里阅读了一些关于这些主题的问题/答案,并搜索了一些文档.但我仍然对此感到困惑......

如果有人可以建议我一些好的在线教程或书籍章节,这将很容易和慢,并从基本开始它将是伟大的.

此外,如果有人知道一些很好的现有运动材料.

c++ polymorphism pointers virtual-functions

1
推荐指数
1
解决办法
593
查看次数

Base constructor calls derived constructor depending on input - Choose object sub-type at runtime

Let's say I have a Human class:

class Human {
public:
    bool isFemale;
    double height;
    Human(bool isFemale, double height) {
        this->isFemale = isFemale;
        this->height = height;
    }
};
Run Code Online (Sandbox Code Playgroud)

and derived classes, such as Female and Male, which implement their own methods. Do I have a way, in C++11, to determine at runtime, depending on the inputs into the Human constructor, which "sub-type" (Male or Female) Human should be? I am putting different behaviour for Male and Female in their respective …

c++ oop design-patterns factory c++11

1
推荐指数
1
解决办法
112
查看次数

泛型和多态性

我非常需要这个问题的答案 - 使用代码示例的泛型和多态之间的差异.我知道它相关的编译时间或绑定的东西,但我不确定..请帮助

polymorphism

-2
推荐指数
2
解决办法
8913
查看次数