小编Par*_*eep的帖子

使用解除引用对象调用虚函数

我有一个指向派生类对象的基类指针.我foo()在下面的代码中使用两种不同的方式调用函数.为什么Derived::foo()在第一种情况下被调用?不应该(*obj).foo()调用Base::foo()函数,因为它已被解除引用?

    class Base
    {
    public:
        Base() {}
        virtual void foo() { std::cout << "Base::foo() called" << std::endl; }
        virtual ~Base() {};
    };

    class Derived: public Base
    {
    public:
        Derived() : Base() {}
        virtual void foo() {  std::cout << "Derived::foo() called" << std::endl; }
        virtual ~Derived() {};
    };

    int main() {
        Base* obj = new Derived();
   // SCENARIO 1
        (*obj).foo();
// SCENARIO 2
        Base obj1 = *obj;
        obj1.foo();

        return 0;
    }
Run Code Online (Sandbox Code Playgroud)

c++ inheritance

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

成员数可变的结构或类

我想创建一个具有可变数量的类成员的结构/类,该类/成员可以在编译阶段决定(例如在模板元编程中完成)

示例:假设其中要同时指定类型名和变量名(如Type T1变量名)应为varName1,依此类推。

template <class T1 (varName1) >
MyClass
{
     T1 varName1;

}

template <class T1 (varName1), class T2 (varName2) >
MyClass
{
     T1 varName1;
     T1 varName2;
}
Run Code Online (Sandbox Code Playgroud)

在主代码中可以像下面这样声明或以其他方式指定类型和名称的方式声明

MyClass对象

和MyClass :: somefunc()可以按以下方式访问变量名称

MyClass::somefunc()
{
     std::cout <<" abc value : " << abc << std::endl;
     std::cout <<" xyz value : " << xyz << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

是否可以通过C ++中的模板元编程同时具有类型和变量名称规范?

c++ templates metaprogramming

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

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

标签 统计

c++ ×3

c ×1

inheritance ×1

metaprogramming ×1

templates ×1