果然讲的和实际情况有出入,不知道跟平台有没有关系,貌似是这样的
c++对象的初始化顺序是:
(a) 基类初始化
(b) 对象成员初时化
(c) 构造函数的赋值语句
假设 class C : public A, public B {
D d;
}
则初始化的顺序是A, B, D, C的构造函数. 这里基类的初始化顺序是按照声明的顺序, 成员对象也是按照声明的顺序. 因此 c(int i, int j) : B(i), A(j) {} //这里成员初始化列表的顺序是不起作用的
析构函数的顺序则刚好是调过来, 构造/析构顺序可看作是一种栈的顺序
c++对象的初始化顺序是:
(a) 基类初始化
(b) 对象成员初时化
(c) 构造函数的赋值语句
假设 class C : public A, public B {
D d;
}
则初始化的顺序是A, B, D, C的构造函数. 这里基类的初始化顺序是按照声明的顺序, 成员对象也是按照声明的顺序. 因此 c(int i, int j) : B(i), A(j) {} //这里成员初始化列表的顺序是不起作用的
析构函数的顺序则刚好是调过来, 构造/析构顺序可看作是一种栈的顺序
2016-04-21
最赞回答 / fanfan598
基础: 任何类的protected和pravite成员都只能通过该类的成员函数访问,不同通过该类实例化的对象进行访问。public继承下: 基类中的protected成员对应到子类的protected成员,对于子类的protected成员,只能通过子类自己的成员函数访问,而不能通过子类实例化的对象访问。
2016-04-19
已采纳回答 / kid123
因为调用test1的时候,是调用类的默认拷贝构造函数,拷贝构造函数因为没有在类内定义,所以是系统自带的。调用test1的时候,不是调用程序员定义的默认构造函数,而是拷贝构造函数。拷贝构造函数的原型为:类名(const 类名 &变量名);
2016-04-06
最赞回答 / angeliaandlu
不管是哪种继承方式,B类都将含有A类的所有数据成员,对于公有继承的特点是基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的,不能被这个派生类的子类所访问;对于保护继承的特点是基类的所有公有成员和保护成员都成为派生类的保护成员,并且只能被它的派生类成员函数或友元访问,基类的私有成员仍然是私有的;对于私有继承的特点是基类的公有成员和保护成员都作为派生类的私有成员,并且不能被这个派生类的子类所访问。
2016-04-05