Chinaunix首页 | 论坛 | 博客
  • 博客访问: 387477
  • 博文数量: 61
  • 博客积分: 1546
  • 博客等级: 中尉
  • 技术积分: 708
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-22 20:07
文章分类

全部博文(61)

文章存档

2011年(61)

分类: C/C++

2011-05-24 23:43:16

有时候,基类构造函数是带有参数,而子类构造函数是不带参数的,如下:
class Animal
{
public:
Animal(int width, int height) { this->width = width; this->height = height; }
private:
int width, height;
};

class Cat:public Animal
{
public:
Cat() { cout << "init cat" << endl; }
};
在建立Cat类对象时,编译出错:
C:\Documents and Settings\Administrator\桌面\abc\Text1.cpp(104) : error C2512: 'Animal' : no appropriate default constructor available

解决这个问题应该在Cat的构造函数中显式调用基类的带参构造函数。因为在基类中定义了带参构造函数,编译器不会提供默认构造函数。
(或者可以在基类中增加一个不带参数的构造函数)这个问题将解决。

下面采用的是调用基类带参构造函数的方式:
class Cat:public Animal
{
public:
Cat():Animal(100,200) { cout << "init cat" << endl; }
};

即在构造函数的后面增加一个冒号,后面是基类的构造函数。
这种方式同样可以用来初始化类中的常量

由于在类定义中不允许对成员进行初始化,常量也不允许。
如下所示:
class Cat:public Animal
{
public:
Cat():Animal(100,200),Age(2),IsLikeFish(true) { cout << "init cat" << endl; }
private:
const int Age;
const bool IsLikeFish;
};
阅读(12859) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~