摘要: #include using namespace std;class A {public: A() { cout using namespace std;class A {public: A() { cout << "call A()" << endl; } virtual ~A() { cout << "call ~A()"; }};class B:public A { char *buf;public: B() { buf = new char[100]; cout << "call B()& 阅读全文
posted @ 2012-12-31 22:28 helloweworld 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 为什么需要虚函数 为了实现多态,即希望派生类重新定义基类的某个函数。 #include <iostream>using namespace std;class A {public: int x; A() { x = 1000; } virtual void print() { cout << "A:x=" << x << endl; }};class B:public A {public: int y; B() { y = 2000; } void print() { cout << "B:y=" 阅读全文
posted @ 2012-12-31 22:20 helloweworld 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 解决多重继承中,一个公共基类可能在派生类中产生多个拷贝的现象。 如:有一个公共基类A,类B和类C都有类A派生,类D由类B和类C派生,则类D含有类A的两个拷贝,这不仅多占内存,还可能造成多个拷贝中的数据不一致。 #include <iostream>using namespace std;class A {public: int x; A(int a = 0) { x = a; }};class B:public A {public: int y; B(int a = 0, int b = 0):A(b) { y = a; } void PB() { cout << &q 阅读全文
posted @ 2012-12-31 20:56 helloweworld 阅读(221) 评论(0) 推荐(0) 编辑
摘要: 对于公有派生来说,可以将派生类的对象赋给基类的对象,反之是不可以的。赋值兼容性规则可以总结为4点:1、不允许将基类的对象赋给派生类的对象。2、派生类的对象可以赋给基类的对象。3、可将派生类的对象的指针赋给基类的指针变量。4、派生类对象可以初始化基类型的引用。在3、4两种情况下,使用基类的指针或引用时,只能访问从相应基类中继承来的成员,不允许访问其他基类的成员或在派生类中增加的成员。#include class Base {private: int val; char bit1;};class Child:public Base {private: char bit2;};int mai... 阅读全文
posted @ 2012-12-31 19:48 helloweworld 阅读(774) 评论(0) 推荐(0) 编辑
摘要: http://www.cnblogs.com/lionfight/archive/2012/05/25/2518631.html 什么时候用拷贝构造函数,和赋值构造函数:(一)当用一个已初始化过了的自定义类类型对象去初始化另一个新构造的对象的时候,拷贝构造函数就会被自动调用。也就是说,当类的对象需要拷贝时,拷贝构造函数将会被调用。以下情况都会调用拷贝构造函数: 一个对象以值传递的方式传入函数体 一个对象以值传递的方式从函数返回 一个对象需要通过另外一个对象进行初始化。 如果在类中没有显式地声明一个拷贝构造函数,那么,编译器将会自动生成一个默认的拷贝构造函数,该构造函数完成对象之间的位... 阅读全文
posted @ 2012-12-31 16:32 helloweworld 阅读(257) 评论(0) 推荐(0) 编辑