您的位置:首页 > 编程语言 > C语言/C++

读书笔记 Visual C++ 编程之道

2015-04-23 15:17 453 查看
1、switch语句只能接受整形值或者枚举型值 。

2、使用this关键字通过 "->" 运行符来引用类的成员变量。例如类里面的set方法的形参和类的成员变量名称相同,所以用 this代表。

3、子类同名的成员变量会隐藏父类同名的成员变量。

4、局部变量和全局变量重名,例如下面程序两次生命sum并不能得到正确结果。

int sum=0;
void getSum(int Array[])
{
int sum=0;
for(int i=0;i<10;++i)
{
sum+=Array[i];
}
}
int main(int argc, char*argv[])
{
int Array[10]={1,2,3,4,5,6,7,8,9,10};
getSum(Array);
cout<<"数组元素和为"<<sum<<endl;
return 0;
}

5、向流中读写结构

#include<iostream>
#include<string.h>
using namespace std;

struct Person
{
char Name[10];
char Sex[10];
};
enum READ_WRITE{READ,WRITE};

void RDStruct(char Array[],Person& Per,READ_WRITE rd)
{
if(rd==WRITE)
{
memcpy(Array,(char*)&Per,sizeof(Per));
}
else if(rd==READ)
{
memcpy((char*)&Per,Array,sizeof(Per));
}
}
int main()
{
char Array[100]={0};
char Name[10]="张三";
char Sex[10]="男";
Person p;
strcpy(p.Name,Name);
strcpy(p.Sex,Sex);
RDStruct(Array,p,WRITE);
Person p1;
RDStruct(Array,p,READ);
cout<<"姓名:"<<p.Name<<endl;
cout<<"性别:"<<p.Sex<<endl;
return 0;
}


上面的代码有两种情况是错误的

一、

struct Person
{
char *Name;
char *Sex;
};


二、

struct Person
{
char Name[];
char Sex[];
};


6、typedef 用法的总结

   创建平台无关的数据类型,隐藏笨拙且难以理解的语法,使用typedef为现有类型创建同义字,定义易于记忆的类型名

   typedef int size;

   size array[4];

   等

  

  typedef还可以掩饰复合类型,如指针和数组。

   例如,可以不用像下面这样重复定义有81个字符元素的数组:

   char  line[81];

   char text[81];

   只需要定义Line类型即代表了具有81个元素的字符数组,使用方法如下:

   typedef char Line[81];

   Line text,line;

   getline(text);  

   同样,可以像下面这样隐藏指针语法:

   typedef char* pstr;

   int mystrcmp(const pstr p1,const pstr p3);

   

   但是用gun的gcc 和g++编译器会出现警告,按照顺序,‘const pstr’被解释为char* const(一个指向char的指针常量),

而事实上,const char* 和char* const 表达的并不相同。

  char * const cp: 定义一个指向字符的指针常数,即const指针,常指针。

  const char*p : 定义一个指向字符常数的指针,即常量指针。

  char const*p : 等同于const char* p。

  为了得到正确的类型,应当如下声明:

  typedef const char* pstr;

  上面说到typedef的两个目的,一个是给变量一个易于记忆且明确的新名字;另外就是简化一些复杂类型的声明。

  

  typedef 和 #define 的区别

  typedef  char* pStr1;

  #define pStr2 char*

  pStr1 s1,s2;

  pStr2 s3,s4;

  s1, s2, s3 被定义为char* ,而s4 则定义成了char。

7、自定义string类型导致函数无效

  这里的自定义string类型指的是  typedef char String[100];

8、数组的定义和初始化

  int *p= new int[12];

  类似这种格式是对的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息