我有一个抽象基类Base
,其中包含指向另一个抽象基类BaseDataClass
的指针。我已经为这两个类派生了类,我将它们分别称为Derived
和DerivedDataClass
。 Base
不知道存在DerivedDataClass
,无论如何,我打算以后再使用Base
和BaseDataClass
子类的多个组合。在派生类中,我希望将指针设置为派生数据类的实例,但是我不希望以后意外地分配指针,所以我将其设置为const
。显然,这使我无法在派生类的构造函数中使用new
分配指针。有一种巧妙的方法可以在保持指针const的同时完成此操作吗?
class BaseDataClass
{
public:
BaseDataClass(){}
//some pure virtual methods
};
class Base
{
public:
Base(){}
//some pure virtual methods
protected:
BaseDataClass * const data; //compiler complains if this isn't set
};
//// elsewhere
class DerivedDataClass : public BaseDataClass
{
public:
DerivedDataClass(){}
};
class Derived : public Base
{
public:
Derived(){
data = new DerivedDataClass(); //also does not compile obviously
}
};
答案 0 :(得分:1)
不能将常量对象分配给它。您必须在初始化时设置const成员的值。如果初始化为null,则它将始终为null。因此,请勿初始化为null。为了让派生类选择初始化它的对象,请使用构造函数参数:
import { Component } from '@angular/core';
import { NavController, NavParams } from 'ionic-angular';
import { AngularFireDatabaseModule } from 'angularfire2/database';
@Component({
selector: 'page-chat',
templateUrl: 'chat.html',
})
export class ChatPage {
username: string=''
message: string=''
constructor(public navCtrl: NavController, public navParams: NavParams,
public db: AngularFireDatabaseModule
) {
this.username = this.navParams.get('username')
}
ionViewDidLoad() {
this.db.list('/chats').push({
username: this.username,
message: this.message
})
console.log(this.navParams);
}
}
您可以使用该参数初始化成员。
说:
Base::Base(BaseDataClass *);
,则应确保最终删除它,否则会泄漏内存。