鱼C论坛

 找回密码
 立即注册
查看: 2253|回复: 3

关于C++中的继承

[复制链接]
发表于 2012-5-28 15:00:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

  1. #include <iostream>
  2. #include <string>

  3. class A
  4. {
  5. public:
  6.         A(std::string n) : name(n) {};
  7.         inline void print()
  8.         {
  9.                 std::cout << "\n" << name << std::endl;
  10.         }
  11. protected:
  12.         std::string name;
  13. };

  14. class B :public A
  15. {
  16. public:
  17.         B(const std::string ss = "Bookoooo") : name(ss) {};
  18. };
复制代码
我定义了个类A,然后再定义一个类B,为什么给类B设定构造函数时,报如下错误:
error C2512: “A”: 没有合适的默认构造函数可用
error C2614: “B”: 非法的成员初始化:“name”不是基或成员

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-5-28 18:45:45 | 显示全部楼层
类B的构造函数会自动调用类A的构造函数。在没有明确指出调用类A的哪个构造函数的时候约定调用午餐构造函数。问题是你写的类A没有无参构造函数,所以报错。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-5-29 11:30:57 | 显示全部楼层

A(std::string n) : name(n) {};
  1. B(const std::string ss = "Bookoooo") : name(ss) {};
复制代码
我给B定义了一个构造函数了,A也定义了一个
奇怪的是,如果我A不定义构造函数,然后B去继承A,这样就没问题。但是我一旦给A定义了构造函数,再用B去继承A就会报错,无论B有没有定义构造函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-5-29 18:42:28 | 显示全部楼层
如果不给A定义构造函数,编译器将产生一个缺省构造函数(无参构造函数)
而当你为A定义了一个构造函数后,编译器就不为你产生缺省构造函数了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 21:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表