标签: class

每个类的Delphi类变量

我已经将类变量添加到深层次结构的基类中.它是一个整数,用于计算每个类类型创建的实例数.但我遇到了一个问题.

举个例子:

  TBaseClass = class
  private
    class var fCreated: integer;
  public
    class function NewInstance: TObject; override;  
  end;

  TDescendant = class(TBaseClass)
  end;

  ...

  class function TBaseClass.NewInstance: TObject;
  begin
    result := inherited NewInstance;
    inc(fCreated);
  end;
Run Code Online (Sandbox Code Playgroud)

我假设我可以使用类var来存储每个类创建的实例,但似乎并非如此.

检查TBaseClass.fCreated返回相同的值TDescendant.fCreated,通过检查器更改一个更改另一个,因此它的行为就好像fCreated是一个全局变量.

我期望fCreated按班级类型进行维护,这不是重点吗?我错过了什么?

delphi variables class

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

PHP - 扩展类

我已经在面向对象的PHP中完成了大量的代码,但到目前为止,我的所有类都是"单数",我想你可以调用它.我正在改变几个类(有5个左右相同的方法)来扩展一个类(以摆脱重复的代码).我遇到了一些问题.

我试图访问父类中的方法,但您可以看到问题.

家长班:

 class DatabaseObject { 

     public static function find_all() {
        return self::find_by_sql("SELECT * FROM " . self::$table_name);
    }
}
Run Code Online (Sandbox Code Playgroud)

儿童班:

class Topics extends DatabaseObject {

    protected static $table_name = "master_cat";
    protected static $db_fields = array('cat_id', 'category');
    public $cat_id;
    public $category;

  }
Run Code Online (Sandbox Code Playgroud)

代码尝试从php/html文件访问此表中的所有信息:

$topics=Topics::find_all();

foreach($topics as $topic):
    echo $topic->category;
endforeach; 
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,大多数代码尚未合并到新的处理方式中.我需要更改self :: $ table_name,它不再以我正在做的新方式工作.我将有大约5个类扩展这个对象,所以最好的编码方式是什么,所以我可以用一个方法访问不同的表(而不是在5个不同的类中包含这个精确的find_all()方法.

php extends class object-oriented-database

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

有没有其他方法来迭代自定义类的属性,不包括内置类的属性?

有另一种方式只通过一个自定义类的属性没有被内置(比如迭代__dict__,__module__等等)?例如,在此代码中:

class Terrain:
    WATER = -1
    GRASS = 0
    HILL = 1
    MOUNTAIN = 2
Run Code Online (Sandbox Code Playgroud)

我可以遍历所有这些属性,如下所示:

for key, value in Terrain.__dict__.items():
    print("{: <11}".format(key), " --> ", value)
Run Code Online (Sandbox Code Playgroud)

哪个输出:

MOUNTAIN     -->  2
__module__   -->  __main__
WATER        -->  -1
HILL         -->  1
__dict__     -->  <attribute '__dict__' of 'Terrain' objects>
GRASS        -->  0
__weakref__  -->  <attribute '__weakref__' of 'Terrain' objects>
__doc__      -->  None
Run Code Online (Sandbox Code Playgroud)

如果我只想要整数参数(枚举类型的基本版本),我可以使用:

for key, value in Terrain.__dict__.items():
    if type(value) is int: # type(value) == int …
Run Code Online (Sandbox Code Playgroud)

python attributes class python-3.x

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

如何在Rails中动态调用或调用类?

假设我可以构造一个匹配现有类的字符串,我该如何调用它?

例如,我有几个类:

  • MyClass1的
  • MyClass2
  • MyClass3

我想通过构造一个匹配其名称的字符串来动态调用它们.如果他们都有方法"方法",我该如何做这样的事情?:

(1..3).each do |n|
  ("MyClass"+n).methods
end
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails class dynamic invoke

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

继承一个接口,实现部分方法,让派生类实现其余的

定义以下C#接口:

public interface IShape
{
    int NumberOfLineSegments {get;}
    int Area {get;}
}
Run Code Online (Sandbox Code Playgroud)

接下来,我想定义几个矩形类:Trapezoid,square等.所有这些类的Area()属性都不同,但NumberOfLineSegments()总是返回4.因此,我想要一个名为Rectangle(或IRectangle)的'临时'类或接口,它看起来像:

public Rectangle : IShape
{
    public int NumberOfLineSegments{get{return 4;}}
}
Run Code Online (Sandbox Code Playgroud)

我希望Rectangle只实现NumberOfLineSegment(),并将其留给派生类来实现其余的:

public Square : Rectangle 
{
    public int Area() {get{return length*height;}
}
Run Code Online (Sandbox Code Playgroud)

但是,由于IShape是一个接口,Rectangle类也必须实现Area(),它不知道如何实现.因此,我似乎被卡住了,要么为Rectangle定义'dummy'Fare()方法,要么完全使用继承权.

有没有办法规避这个?我通过c#和StackOverflow在Richter的clr中广泛阅读.提前致谢!

c# inheritance interface class

11
推荐指数
2
解决办法
4369
查看次数

在PHP中不可能使用静态数组属性吗?

下面是我在php中的代码,我收到错误:

解析错误:语法错误,第4行/LR_StaticSettings.php中的意外'['

<?php
class StaticSettings{
    function setkey ($key, $value) {
        self::arrErr[$key] = $value; // error in this line
    }
}
?>
Run Code Online (Sandbox Code Playgroud)

我想静态地使用,$this->arrErr[$key]以便我可以在不创建实例/对象的情况下获取和设置静态属性.

为什么会出错?我们不能创建静态数组吗?

如果有其他方式,请告诉我.谢谢

php static class

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

成员变量的多态性.我知道这是不可能的,我不明白这个具体案例

我知道这种行为,但我不确定为什么会这样.
据我所知,java中的实例变量没有多态性.变量由编译器静态解析.
但在下面我对某些事感到困惑:

class Animal{  
   String name = "Animal";  
   public void display(){  
    System.out.println("My name is "+ name);  
   }  
}  

public class Dog extends Animal {   
   String name = "Dog";   

   public static void main(String[] args) {  
        Animal a = new Dog();  
        Dog d = new Dog();  
        System.out.println(a.name);//Line 1  
        a.display();//Line 2   
        d.display();//Line 3  
   }  
}  
Run Code Online (Sandbox Code Playgroud)

我认为Line 1它会显示Animal为静态类型a(由编译器解析).
让我困惑的是为什么Line 3还要展示My name is Animal
将尝试调用该方法,Dog因为这是运行时的实际对象,因为它不会被覆盖,所以可以在父类中找到该方法Animal.
我没有得到的是为什么在操作的实际对象是a时,name在方法内部使用父类.它不隐藏父变量吗?在我看来它并不是因为类型是静态解析的.这不是oject的内存布局的一部分吗? 就像里面只有父的变量是可见的.为什么? display …

java oop polymorphism overriding class

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

基类的虚拟朋友函数?

我正在学习语言,这是一个否定的怀疑.

是否可以使用虚拟朋友功能?我不知道是否可能,我甚至没有测试它,但它在某些情况下可能有用.例如,对于重载运算符<<().

DerivedClass dc;
BaseClass &rbc = dc;
cout << rbc;
Run Code Online (Sandbox Code Playgroud)

我的猜测是可能的,但我不确定,因为朋友的功能没有在类设计中实现,理论上也不是它的一部分(尽管在这个例子中,从概念上讲,运算符<<()应该是一个意义方法,但由于语法限制,不可能将其实现为一个).

编辑:我关心的是这个例子:

BaseClass bc;
DerivedClass dc;
BaseClass *pArr[2];
pArr[1] = bc;
pArr[2] = dc;
for (int i = 0; i < 2; i++)
    cout << pArr[i];
Run Code Online (Sandbox Code Playgroud)

在这个混合对象数组中,我想要为每个对象调用正确的运算符<<().

c++ virtual class function friend

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

类中的php回调函数

由于某些原因,我们的托管公司使用PHP 5.2,甚至没有预先安装mysqli和PDO.

我别无选择,只能重写代码的某些部分,使其兼容5.2.

所以,这是我的问题:

在PHP 5.2中不支持匿名函数,所以我做了以下测试以确保我正确地更改代码:

class foo{

    public function toString(){
        $arr = array("a", "b");
        $arr2 = array("c", "d");
        print_r(array_map('mapKeyValue', $arr, $arr2));
    }

    private function mapKeyValue($v, $k){
        return $k."='".$v."'";
    }
}

$foo = new foo();
echo $foo->toString();
Run Code Online (Sandbox Code Playgroud)

但上面会给我:

Warning: array_map() expects parameter 1 to be a valid callback, function 'mapKeyValue' not found or invalid function name in ....
PHP Warning: array_map() expects parameter 1 to be a valid callback, function 'mapKeyValue' not found or invalid function name in ....
Run Code Online (Sandbox Code Playgroud)

什么是正确的方法: …

php hosting class php-5.2

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

不能将矩阵数类强制转换为整数

我正在编写一个邻接矩阵R:

neighbours <- array(0, c(100,100))
for (i in 1:100) { neighbours[i,i] = 1 }    #reflexive
Run Code Online (Sandbox Code Playgroud)

但后来我发现了class(neighbours)double matrix.用更大的矩阵来占用太多空间.所以我想强迫这个类型integer,甚至更好,因为这是无向的,logical.

但...

> class(neighbours[5])
[1] "numeric"
> class(neighbours[5]) <- "integer"
> class(neighbours[5])
[1] "numeric"
Run Code Online (Sandbox Code Playgroud)

这不是听我的!

oop r class matrix

11
推荐指数
3
解决办法
6358
查看次数