上一页 1 ··· 26 27 28 29 30 31 32 33 34 ··· 48 下一页
摘要: 为什么需要虚函数 为了实现多态,即希望派生类重新定义基类的某个函数。 #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 阅读(152) 评论(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 阅读(225) 评论(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 阅读(783) 评论(0) 推荐(0) 编辑
摘要: http://www.cnblogs.com/lionfight/archive/2012/05/25/2518631.html 什么时候用拷贝构造函数,和赋值构造函数:(一)当用一个已初始化过了的自定义类类型对象去初始化另一个新构造的对象的时候,拷贝构造函数就会被自动调用。也就是说,当类的对象需要拷贝时,拷贝构造函数将会被调用。以下情况都会调用拷贝构造函数: 一个对象以值传递的方式传入函数体 一个对象以值传递的方式从函数返回 一个对象需要通过另外一个对象进行初始化。 如果在类中没有显式地声明一个拷贝构造函数,那么,编译器将会自动生成一个默认的拷贝构造函数,该构造函数完成对象之间的位... 阅读全文
posted @ 2012-12-31 16:32 helloweworld 阅读(258) 评论(0) 推荐(0) 编辑
摘要: 下面使用errno进行错误处理是错误的。 /*调用库函数*/if (errno) /*处理错误*/原因:上面代码的意图是,调用库函数失败,则会设置非零errno,从而进行错误处理;调用成功,则不进行错误处理。问题是,即使调用成功,也没有强制要求将errno设置为0,即虽然调用库函数成功,但是errno并不一定为0,可能是在调用库函数之前errno就被设置为非零值了。下面代码仍然是错误的。errno = 0;/*调用库函数*/if (errno) /*处理错误*/原因:这段代码在调用库函数之前将errno设置为0,表面上看,如果调用库函数成功,则不会处理错误。问题在于,即使调用库函数成功,err 阅读全文
posted @ 2012-12-30 13:48 helloweworld 阅读(266) 评论(0) 推荐(0) 编辑
摘要: 下面定义的是类模板,用int实例化T后成为模板类。实例化类模板的语法:类名<模板实参表>结合下例即 Array<int> 就是将类模板Array实例化为模板类的语法。/*类模板*/#include <iostream>using namespace std;template<class T>class Array { T *data; int size;public: Array(int i) { data = new T[i]; size = i; } ~Array() { delete[] data; } T& operator[]( 阅读全文
posted @ 2012-12-29 21:13 helloweworld 阅读(162) 评论(0) 推荐(0) 编辑
摘要: /*函数模板*/#include <iostream>using namespace std;//template<typename T> //也可以用typename关键字。template<class T>T mymax(T x, T y){ return (x > y) ? x : y;}int main(void){ cout << mymax(2.3f, 1.3f) << endl; cout << mymax(2, 3) << endl; cout << mymax('a& 阅读全文
posted @ 2012-12-29 20:53 helloweworld 阅读(255) 评论(0) 推荐(0) 编辑
摘要: 有 a[10]; 有效下标为什么是从0到9呢,《c陷阱与缺陷》给出了解释。 不对称边界 0 <= x < 10 不对称边界就是一个左闭右开区间,0称为入届点(上届),10称为出界点(下届)。 不对称边界的好处就是: 1、上届与下届之差是元素个数。 2、如果取值范围为空,那么上届等于下届。 3、即使取值范围为空,上届也永远不可能小于下届。 数组下标正是采用了不对称边界,利用了其优点。 阅读全文
posted @ 2012-12-28 17:03 helloweworld 阅读(229) 评论(0) 推荐(0) 编辑
摘要: /*c语言动态数组,运行时确定数组元素个数。*/#include <stdio.h>#include <malloc.h>int main(void){ int *p; int n; /*运行时分配内存*/ scanf("%d", &n); p = (int *)malloc(sizeof(int) * n); /*输入数组元素*/ int i; for (i = 0; i < n; i++) { scanf("%d", &p[i]); } /*输出数组元素*/ int j; for (j = 0; j &l 阅读全文
posted @ 2012-12-28 14:22 helloweworld 阅读(362) 评论(0) 推荐(0) 编辑
摘要: int calendar[12][31]; 看作,“一维”数组有12个元素,每个元素是一个有31个整型元素的数组。 阅读全文
posted @ 2012-12-28 14:00 helloweworld 阅读(122) 评论(0) 推荐(0) 编辑
上一页 1 ··· 26 27 28 29 30 31 32 33 34 ··· 48 下一页