关于何时使用构造函数,何时使用初始化函数

选择的区别,就在于

构造函数,在构造的时候,完成了对象的相关基本属性。

初始化函数,就是在构造了之后,还可以进行其他主要参数的设定。

构造函数,生成对象的时候,只能发生一次

初始化函数,原则上可以发生很多次。

举个例子,一个人,生下来,就是构造函数起了作用,比如是男是女

初始化函数好比在户口信息没有了,没有办法,到公安局重新办了一个。原则上这个是可以多次办的,只要人没有死。虽然政策不允许。

好了下面讲讲关于,bean,dbTable,db的构造函数和初始化函数的使用。

他们的关系是 db->dbtable->dbbean的继承关系

关于db,很少需要重新初始化,因为,这样是没有价值的,所以,以上三个可以全部使用构造函数来进行初始化。

但是目前m_initial函数可以暂时保留,但是应该慢慢的应该全部转入构造函数处理。

其实不是慢慢转入,而是be or not to be的问题。

因为是继承关系,如果db采用的是构造函数,以上的都要采用构造函数。

那么,其实的选择是,在dbbean中,采用构造函数,可以完成对象初始化。

但是如果保留了m_Initial,则对象拥有了,在运行过程中变身的能力,就如孙悟空有了七十二变的能力。

可以随时将自己变为另一个人。恩,这样也行。

另外关于继承,如果bean继承了db的能力,意味着,可以在bean中,进行对应db数据库的任意操作,从概念而言,这个是过分的。

所以正常情况下,dbtable和db的关系应该是组合关系,dbbean和dbtable是继承,这个可以接受。

这样,可以在dbtable中进行db表操作的限制。

如果需要其他的db功能,可以由dbtable 得到一个 db的对象,然后自行扩展。这样在层次上,bean不会显露十分多的底层db的东西,虽然不多,

但是不符合逻辑

关于何时使用构造函数,何时使用初始化函数

时间: 2024-11-02 15:07:39

关于何时使用构造函数,何时使用初始化函数的相关文章

Objective-C学习- 便利初始化函数和便利构造器

在面向对象的语言中,Objective-C的 便利初始化函数 可以理解为 如 Java,C++ 中的含参数的构造函数,但又有些不同... 例如,用Student类为例 首先是Student.h文件 #import <Foundation/Foundation.h> @interface Student : NSObject //定义属性 @property NSString *studentName; //学生姓名 @property int age; //学生年龄 //含姓名参数和年龄参数的

【C/C++】构造函数、默认构造函数、成员初始化列表

常见问题 Q1. 下列关于构造函数的描述中,错误的是( ) A. 构造函数可以设置默认的参数 B. 构造函数在定义类对象时自动执行 C. 构造函数可以是内联函数 D. 构造函数不可以重载 Q2. 下列代码中a.b的各个成员变量值是多少? 1 class Student 2 { 3 public: 4 Student() {} 5 void show(); 6 private: 7 string name; 8 int number; 9 int score; 10 }; 11 Student a

JavaScript中以构造函数的方式调用函数

转自:http://www.cnblogs.com/Saints/p/6012188.html 构造器函数(Constructor functions)的定义和任何其它函数一样,我们可以使用函数声明.函数表达式或者函数构造器(见以前的随笔)等方式来构造函数对象.函数构造器和其它函数的区别在与它们的调用方式不同. 要以构造函数的方式调用函数,只需要在调用时在函数名称前加new 关键字,比如:function whatsMyContext(){ return this; }; 调用:new what

为什么 构造函数、内联函数、静态函数和友元函数不能是虚函数

构造函数为什么不能是虚函数 C++ 从存储空间角度,虚函数对应一个指向vtable虚函数表的指针,这大家都知道,可是这个指向vtable的指针其实是存储在对象的内存空间的.问题出来了,如果构造函数是虚的,就需要通过vtable来调用,可是对象还没有实例化,也就是内存空间还没有,怎么找vtable呢?所以构造函数不能是虚函数.简单来说就是:虚函数的执行依赖于虚函数表.而虚函数表在构造函数中进行初始化工作,即初始化vptr,让他指向正确的虚函数表.而在构造对象期间,虚函数表还没有被初始化,将无法进行

为什么构造函数不能是虚函数

首先,我写了一个构造函数用virtual修饰的类A,代码如下: class A { public: virtual A() {} }; 运行结果:(我是在VS下运行的) 可以看出这样的代码编译时是有问题的. 为什么构造函数不能是虚函数呢? 这里你需要知道一个概念,那就是虚函数表vtbl,每一个拥有虚成员函数的类都有一个指向虚函数表的指针.对象通过虚函数表里存储的虚函数地址来调用虚函数. 那虚函数表指针是什么时候初始化的呢?当然是构造函数.当我们通过new来创建一个对象的时候,第一步是申请需要的内

C++类的构造函数不能为虚函数的原因

C++类的对象构造的时候,首先申请一片内存,然后调用构造函数进行初始化: 我们知道,存在虚函数的话,也会存在一个虚函数表vtable,而虚函数表示在什么时候产生的呢,当然是在调用构造函数之后产生的: 那么问题来了,如果构造函数为虚函数,此时的内存是一片空白,不存在该虚函数表vtable,那么无法找到该构造函数: 所以说,构造函数不能为虚函数. 对于析构函数而言,可以为虚函数,因为此时虚函数表早已建立:并且,常常析构函数都是虚函数.原因就是,通过基类指针在销毁对象的时候,可以正确的识别要销毁对象的

为什么构造函数不能为虚函数

1,从存储空间角度 虚函数对应一个vtable,这大家都知道,可是这个vtable其实是存储在对象的内存空间的.问题出来了,如果构造函数是虚的,就需要通过 vtable来调用,可是对象还没有实例化,也就是内存空间还没有,无法找到vtable,所以构造函数不能是虚函数. 2,从使用角度 虚函数主要用于在信息不全的情况下,能使重载的函数得到对应的调用.构造函数本身就是要初始化实例,那使用虚函数也没有实际意义呀.所以构造函数没有必要是虚函数. 虚函数的作用在于通过父类的指针或者引用来调用它的时候能够变

为什么构造函数不能为虚函数,而析构函数可以为虚函数

1.  构造函数为什么不能为虚函数? a.  存储空间角度: 虚函数的调用需要虚函数表指针,而该指针存放在对象的内容空间中,需要调用构造函数才可以创建他的值,否则即使开辟了空间,则虚表指针为随机值,不会找到构造函数:若构造函数声明为虚函数,那么由于对象还未创建,还没有内存空间,更没有虚函数表地址用来调用虚函数——构造函数了. b.  使用上:  从实现上看,vbtl在构造函数调用后才建立,因而构造函数不可能成为虚函数: 虚函数主要是实现多态,在运行时才可以明确调用对象,根据传入的对象类型,来调用

09 构造函数能调用虚函数吗?

[本文链接] http://www.cnblogs.com/hellogiser/p/whether-constructor-can-call-virtual-function.html [题目] 构造函数可以调用虚函数吗?语法上通过吗?语义上可以通过吗? [分析] 构造函数调用虚函数(virtual function),语法上可以通过(程序可以正常执行),但是语义上通不过(执行结果不是我们想要的) 请看以下代码 C++ Code 12345678910111213141516171819202