1.c++中,基类必须指出希望派生类重定义那些函数,定义为virtual的函数是基类期待派生类重新定义的。基类希望派生类继承的函数不能定义为虚函数。
2.通过基类的引用(或指针)调用虚函数时无需区分函数是在基类中还是派生类中定义的(动态绑定)。如class base{}; class temp:public base{};
base object; temp object2;
base &item = object2; base &item = object;
base *it = &object; base *it = &object2;
3.输出华氏到摄氏的对照表low从0开始,upper最大到300.步长为20°
int low, upper, further;
low=further=0;
while(further<=upper)
{
//dosomething
further+=20;
}
for(further=0; further<=upper;further+=20)
{
//dosomething
}
4.
C语言中,赋值语句可以放在表达式中,c++也适合的
int c = getchar();
while(c!=EOF){}
改写成
while((c=getchar())!=EOF){}
5.文件的结尾用EOF表示,行用\n表示,tab键用\t表示(4个空格的长度),\b表示回退一个空格的位置
补充:
EOF也是输入流的结尾
while(scanf("%s, %d", p, &value) != EOF){}
6.统计字数
#define No 0
#define Yes 1
int inword = No;
while((c=getchar())!=EOF){
if(c==' '||c=='\n'||c=='\t')
inword = No;
else if(inword == No) {
inword = Yes; //碰到字母时候就会是Yes,只有到空格,回车,tab时候才会是No,后面是碰到非字母的时候才会是Yes(意味着字数加1)
nw++;
}
}
7.统计数字的个数
int ndigit[10];
for(i=0;i<10;++i) ndigit[i]=0;
while((c=getchar())!=EOF)
if(c>='0'&&c<='9')
++nigit[c-'0']; //[]优先级高,先算c-'0'
8.拷贝字符串,char s2[]是空的
int i=0;
while((s2[i]=s1[i])!='\0') ++i;
9.局部变量在函数调用时出现,退出时消失,不保留其值。所以每次调用时候要设置初始值,否则局部变量中可能包含“垃圾”。
10.每个浮点常量都是去双精度double
11.字符常数'\0'表示值为0的字符,通常用'\0'表示值为0的字符以强调某表达式的字符特性,而不直接用0。-----'\0'就叫零字符
12.数字字符串转换成具体的数值
for(i=0; s[i]>='0'&&s[i]<='9'; ++i)
n=10*n+s[i]-'0';
13.字母大小写转换
if(c>='A'&&c<='Z')
return c+'a'-'A';
14.将字符串中与字符变量c相同的删除(所谓删除等价于保留有用的)
for(i=0, j=0; s[i]!='\0'; i++)
if(s[i]!=c)
s[j++]=s[i];
s[j]='\0';
15.字符串t连接到字符串s后面,s[]内存足够容纳
int i=0,j=0;
while(s[i]!='\0') i++; //指到数组末尾
while( (s[i++]=t[j++])!='\0' )
16.计算整数n中位值为1的位数
for(b=0; n!=0; n>>1)
if(n&01)
b++;
return b;
17.打印:每行10个元素,列与列之间由空白隔开,每行以'\n'结束,最后一行也是'\n'
for(i=0; i<N; i++)
printf("%6d%c", a[i], (i%10==9||i==N-1) ? '\n' : ");
18.二分法查找(V按升序排列,查找对象x,元素个数0~n-1,不存在返回-1)
int binary(int x, int v[], int n) {
int low=0, high=n-1, mid;
while(low<=high) {
mid=(low+high)/2;
if(x<v[mid])
high=mid-1;
else if(x>v[mid])
low=mid+1;
else
return mid;
}
return -1;
}
19.二维数组的动态内存申请
//这个申请的内存,只有行是连续的内存地址,列是不连续的
int ** q=NULL;
q=(int **)malloc(w*sizeof(int*));
for(int i=0;i<w;i++)
q[i]=(int*)malloc(h*sizeof(int));
//访问二维数组
for(int i=0; i<w; i++)
for(int j=0; j<h; j++)
printf("%p ", &q[w][j]);
//内存释放
for(int i=0; i<w; i++)
{free(q[i]); q[i]=NULL;}
free(q);
q=NULL;
//下面这种都是连续的
int ** p = NULL;
p=(int** )malloc(w*sizeof(int *));
p[0]=(int *)malloc(w*h*sizeof(int));
for(int i=1; i<w; i++)
p[i]=p[i-1]+h;
//访问二维数组
for(int i=0; i<w; i++)
for(int j=0; j<h; j++)
printf(“%p ”, &p[i][j]);
//释放内存
free(p[0]);
p[0]=NULL;
free(p);
p=NULL;
20.经典的例子
double push(double f){return val[c++]=f;} 1.val[c]=f; 2.return val[c]; 3.c++
21.c++三目运算
(a<b?a:b)=30; 相当于c中的*((a<b?&a:&b))=30;