我该如何调用父母构造函数?
module C
    attr_accessor :c, :cc
    def initialization c, cc
        @c, @cc = c, cc
    end 
end
class B
    attr_accessor :b, :bb
    def initialization b, bb
        @b, @bb = b, bb
    end 
end
class A < B
    include C
    attr_accessor :a, :aa
    def initialization (a, b, c, aa, bb, cc)
        #call B::initialization - ?
        #call C::initialization - ?
        @a, @aa = a, aa
    end
end
Run Code Online (Sandbox Code Playgroud)
谢谢.
以下JavaScript代码对我来说非常混乱.任何人都可以帮助我理解.为什么PersonY没有原型属性.
PersonX = function(){};
PersonY = new function(){};
alert(PersonX.prototype);
alert(PersonY.prototype);    
?
Run Code Online (Sandbox Code Playgroud) 如果使用VC ++ 2017编译,下面的代码将显示垃圾(或零),如果使用GCC或Clang(https://rextester.com/JEV81255)进行编译,则以下代码将显示“ 1122” 。是VC ++的bug还是我在这里遗漏了一些东西?
#include <iostream>
struct Item {
    int id;
    int type;
};
int main()
{
    auto items = new Item[2]
    {
        { 1, 1 },
        { 2, 2 }
    };
    std::cout << items[0].id << items[0].type;
    std::cout << items[1].id << items[1].type;
}
Run Code Online (Sandbox Code Playgroud)
同时,如果元素属于原始类型(例如int),则也可以使用。
c++ new-operator visual-c++ compiler-bug aggregate-initialization
我有以下课程:
class Base
{
    public virtual void Print()
    {
        Console.WriteLine("Base");
    }
}
class Der1 : Base
{
    public new virtual void Print()
    {
        Console.WriteLine("Der1");
    }
}
class Der2 : Der1
{
    public override void Print()
    {
        Console.WriteLine("Der2");
    }
}
Run Code Online (Sandbox Code Playgroud)
这是我的主要方法:
Base b = new Der2();
Der1 d1 = new Der2();
Der2 d2 = new Der2();
b.Print();
d1.Print();
d2.Print();
Run Code Online (Sandbox Code Playgroud)
输出是Base,Der2,Der2.
据我所知,即使指针指向它们,Override也不会让以前的方法运行.所以第一行也应该输出Der2.然而Base出来了.
这怎么可能?覆盖如何在那里不起作用?
以下两个声明之间有什么区别吗?
int arr[] = new int [5];
Run Code Online (Sandbox Code Playgroud)
和
int arr1[] = {1,2,3,4,5};
Run Code Online (Sandbox Code Playgroud)
是arr1在堆栈上还是在堆上声明?
所以我试图找回 ubutu 升级到 22.04 版本后消失的菜单设置。
老实说,我对这一切都是新手。这是我得到的代码:
我尝试:
root@blast-ThinkPad-T430:/home/blast# apt-get install gnome-control-center
我得到:
Could not find platform independent libraries <prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Python path configuration:
  PYTHONHOME = (not set)
  PYTHONPATH = (not set)
  program name = '/usr/bin/python3'
  isolated = 0
  environment = 1
  user site = 1
  import site = 1
  sys._base_executable = '/usr/bin/python3'
  sys.base_prefix = '/usr'
  sys.base_exec_prefix = '/usr'
  sys.platlibdir = 'lib'
  sys.executable = '/usr/bin/python3'
  sys.prefix = '/usr'
  sys.exec_prefix = '/usr'
  sys.path = [
    '/usr/lib/python310.zip',
    '/usr/lib/python3.10',
    '/usr/lib/python3.10/lib-dynload', …Run Code Online (Sandbox Code Playgroud) 我想重置一个对象.我可以通过以下方式进行吗?
anObject->~AnObject();
anObject = new(anObject) AnObject();
// edit: this is not allowed: anObject->AnObject();
Run Code Online (Sandbox Code Playgroud)
此代码显然是在placement new中分配的对象的典型生命周期的子集:
AnObject* anObject = malloc(sizeof(AnObject));
anObject = new (anObject) AnObject(); // My step 2.
// ...
anObject->~AnObject(); // My step 1.
free(anObject)
// EDIT: The fact I used malloc instead of new doesn't carry any meaning
Run Code Online (Sandbox Code Playgroud)
唯一改变的是构造函数和析构函数调用的顺序.
那么,为什么在以下常见问题解答中 出现所有威胁呢?
[11.9]但是如果我用new分配了我的对象,我可以显式调用析构函数吗?
常见问题解答:除非对象分配了新的展示位置,否则您不能.必须删除new创建的对象,它会做两件事(记住它们):调用析构函数,然后释放内存.
FQA:翻译:删除是一种明确调用析构函数的方法,但它也会释放内存.您也可以在不释放内存的情况下调用析构函数.在大多数情况下它很丑陋而且无用,但你可以做到这一点.
析构函数/构造函数调用显然是普通的C++代码.代码中使用的保证直接来自放置新保证.它是标准的核心,它坚如磐石.它怎么称为"脏"并被表现为不可靠的东西?
您是否认为新的插入式和非插入式实施是不同的?我正在考虑一些病态的可能性,例如,常规的新的可以放置在块之前分配的内存块的大小,其中放置新的显然不会这样做(因为它不分配任何内存).这可能会导致某些问题出现间隙...... 这样的新()实现是否可行?
开发一个通用的接口我希望在一个接口中声明一个构造函数,但它说那里禁止构造函数.我试图声明一个静态工厂方法,但它说不允许使用静态方法,并建议使用'new'关键字.但我几乎不知道在C#中使用界面时,'new'关键字究竟意味着什么.你呢?
更新:
我没有发布任何示例代码,因为我不想混合2个问题 - 如何在界面中指定构造函数/工厂以及'new'关键字在接口中的含义.II甚至只被强制指定第一部分因为StackOverflow不接受纯粹形式的第二个问题,说它不符合质量标准.
但是,正如你所要求的那样,我将对我试图实现的目标进行抽样:
Interface IMyInterface <T, U, V>
{
    IMyInterface (T, U, U);
    // OR
    static IMyInterface GetNewIMyInterface (T, U, U);
}
Run Code Online (Sandbox Code Playgroud)
我只是希望每个派生类都实现这样的构造函数.
我想以一种格式初始化一个数组,该格式使用逗号分隔花括号中包围的元素,例如:
int array[10]={1,2,3,4,5,6,7,8,9,10};
Run Code Online (Sandbox Code Playgroud)
但是,我需要使用new运算符来分配内存,例如:
int *array = new int[10];
Run Code Online (Sandbox Code Playgroud)
有没有办法结合这些方法,以便我可以使用new运算符分配内存并使用花括号初始化数组?
我正在设计一个具有std::vector<int>实例变量的类.我正在使用a,std::vector因为我需要在运行时设置它的大小.以下是我的代码的相关部分:
my_class.h:
#include <vector>
using std::vector;
class MyClass {
    int size;
    vector<int> vec;
}
my_class.cc:
#include "my_class.h"
using std::vector
MyClass::MyClass(int m_size) : size(m_size) {
     vec = new vector<int>(size,0);
}
Run Code Online (Sandbox Code Playgroud)
当我尝试编译时,我收到以下错误消息:
g++ -c -Wall my_class.cc -o my_class.o
my_class.cc: In constructor ‘MyClass::MyClass(int):
  my_class.cc:4 error: no match for ‘operator=’ in ‘((MyClass*)this)->My_Class::vec = ((*(const allocator_type*)(& std::allocator<int>())), (operator new(24u), (<statement>, ((std::vector<int>*)<anonymous>))))’
make: *** [my_class.o] Error 1
Run Code Online (Sandbox Code Playgroud)
但是,当我将违规行更改为:
vector<int> temp(size,0);
vec = temp;
Run Code Online (Sandbox Code Playgroud)
它现在编译没有故障,我得到了所需的行为,并可以访问我的矢量
vec[i]  // i having been defined as an …Run Code Online (Sandbox Code Playgroud) new-operator ×10
c++ ×4
arrays ×2
c# ×2
constructor ×2
.net ×1
compiler-bug ×1
interface ×1
java ×1
javascript ×1
menu ×1
oop ×1
overriding ×1
ruby ×1
settings ×1
stdvector ×1
ubuntu ×1
ubuntu-22.04 ×1
virtual ×1
visual-c++ ×1