自己看

来源:互联网 发布:淘宝如何快速打造爆款 编辑:程序博客网 时间:2024/05/17 02:01

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;





原创粉丝点击