继承-关于c++成员初始化列表

问题描述

关于c++成员初始化列表

假定manager类由person类公有继承而来 新增了一个int值成员a
定义manager类的复制构造函数时
manager::manager(const manager & m):person(m),a(m.a) { }
是不是不能a(m.a)这样用?我把”.“打出来后显示没有可用成员 为什么呢?

解决方案

 class A
{
    public: int a;
};
class B
{
    public: B(int a) {}
};
class C
{
    B b;
    public: C(const A& a) : b(a.a) {}
};
int main() {}

可以编译

http://codepad.org/KEAJ4lAD

解决方案二:

C++初始化类的成员,不但可以用构造函数(constructor)完成,而且可以用初始化类成员列表来完成。MFC大量用到此方法。例如有些初学者可能不大理解如下代码:
class A
{
??public:
????int member_var; //成员变量
???&nbsp......
答案就在这里:C++初始化成员列表

时间: 2024-07-28 13:49:03

继承-关于c++成员初始化列表的相关文章

成员初始化列表与构造函数体中的区别详细解析_C 语言

论坛中回答一个别人问题 C++ Primer中在讲构造函数初始化列表的时候有这么一段话:无论是在构造函数初始化列表中初始化成员,还是在构造函数体中对它们赋值,最终结果是相同的.不同之处在于,使用构造函数初始化列表的版本初始化数据成员,没有定义初始化列表的构造函数版本在构造函数体中对数据成员赋值. 请问这里的初始化数据成员与对数据成员赋值的含义是什么?有什么区别? 我知道在数据成员有默认构造函数时是有不同的,但对其他类型的成员呢?其他类型成员的初始化和赋值有区别吗?================

C++对象模型(四):class成员初始化列表(Member Initialization List)

本文是Inside C++ Object Model Chapter 2 部分的读书笔记. 编译器如何处理初始化成员列表的. 下列情况中,必须要使用member initialization list进行data member 的初始化: 1) 当初始化一个reference member. 2) 当初始化一个const member. 3) 当调用一个base class 的constructor,而他拥有一组参数的时候. 4) 调用一个member class 的constructor ,而

c++基础语法:构造函数初始化列表_C 语言

C++为类中提供类成员的初始化列表 类对象的构造 顺序是这样的:1.分配内存,调用构造函数 时,隐式/显示的初始化各数据 成员2.进入构造函数后在构造函数中执行一般计算 使用初始化列表有两个原因: 1.必须这样做:如果我们有一个类成员,它本身是一个类或者是一个结构,而且这个成员它只有一个带参数的构造函数,而没有默认构造函数,这时要对这个类成员进行初始化,就必须调用这个类成员的带参数的构造函数,如果没有初始化列表,那么他将无法完成第一步,就会报错. 复制代码 代码如下: class  ABC  .

为什么不能在子类的初始化列表里初始化父类的成员

前段时间写了一段代码,其等价形式如下: class A { protected: int n_; }; class B : public A { public: B() : n_(0) {} }; class A { protected :      int n_ ; } ; class B : public A { public :      B ( ) : n_ ( 0 )      { } } ; intellisense会在高亮行提示: "n_" is not a nonsta

c++构造函数的初始化列表中初始化了一个类类型的成员,调用的是类类型的复制构造函数吧?

问题描述 c++构造函数的初始化列表中初始化了一个类类型的成员,调用的是类类型的复制构造函数吧? 如题:c++构造函数的初始化列表中初始化了一个类类型的成员,调用的是类类型的复制构造函数吧? 解决方案 什么?复制构造函数? 解决方案二: C++类构造函数列表初始化C++类构造函数初始化列表c++中什么类型的成员变量只能在构造函数的初始化列表中进行 解决方案三: 真是初始化列表,跟复制构造函数没关系,调用复制构造函数要看你是如何初始化的 解决方案四: 参数列表初始化成员是调用成员的构造函数,但是什

Way on c & c++ 小记 [五] – 初始化列表与成员函参作用域

初始化列表与成员函参作用域 作者:Jason Lee @http://blog.csdn.net/jasonblog 日期:2010-04-11   [1]初始化列表 所谓初始化列表,从语法角度讲,就是构造函数圆括号后的冒号与左花括号之间的紧跟初始值的变量序列,如下是一个示例: Demo(): b(2), a(b){ 作为初始化列表,它以它的作用和初始化顺序而出名.   初始化列表有什么作用呢?我觉得可以一言以蔽之:初始化列表最重要的作用就是用来初始化不能被赋值的成员.比如引用必须在第一次出现的

C#类的成员初始化顺序

C#作为一种纯面向对象的话言,为它编写的整个代码里面到处都离不开对象.一个对象的完整的生命周期是从开始分配空间到初始化,到使用,最后是销毁,使用的资源被回收.要想真正写出面高质量的代码,我们就得对这期间每一个阶段是怎么样一个状态,framework都做了些什么,我们又能够做些什么都要有些了解才行. 一般来说大部分程序员对于一个创建好了的对象怎么使用都是比较清楚的,所以本文也就不想就这一部分做太多的说明,重点就集中开对象的创建和销毁这两个阶段,这也是程序员最容易范错误的阶断.本文首先来讲一讲对象成

c++ 构造函数的初始化列表

构造函数的初始化列表仅仅指定用于初始化成员的值,并不指定这些初始化执行的次序.成员初始化的次序就是定义成员的次序,第一个成员首先被初始化,然后是第二个,依次类推   首先,运行下图中的C++代码,输出是什么? 复制代码 代码如下: class A { private:  int n1;  int n2; public:  A(): n2(0) , n1(n2 + 2)  {  }  void Print()  {   cout<<"n1:"<<n1<<

初始化列表-Effective-c++-第十三项的疑问

问题描述 Effective-c++-第十三项的疑问 Effective C++中,条款13:是这样写的:初始化列表中成员列出的顺序和他们在类中声明的顺序相同.而且给出了相关例子.比如如果在类中是这样声明的: class A{ ... private: int sum1; int sum2; } 在构造函数中这样写 A::A:sum2(sum1)sum1(10){...} 这样写就会有问题,sum2的值是错误的.但是如果这样写 A::A:sum2(10)sum1(10) 这样就不会有问题.这是为