读书笔记 Visual C++ 编程之道
2015-04-23 15:17
453 查看
1、switch语句只能接受整形值或者枚举型值 。
2、使用this关键字通过 "->" 运行符来引用类的成员变量。例如类里面的set方法的形参和类的成员变量名称相同,所以用 this代表。
3、子类同名的成员变量会隐藏父类同名的成员变量。
4、局部变量和全局变量重名,例如下面程序两次生命sum并不能得到正确结果。
5、向流中读写结构
上面的代码有两种情况是错误的
一、
二、
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];
类似这种格式是对的。
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];
类似这种格式是对的。
相关文章推荐
- 《精通Visual C++ 实效编程280例》读书笔记(第一章 窗口)
- 精通Visual C++图象编程------读书笔记8
- 《精通Visual C++ 实效编程280例》读书笔记(第三章 控制栏)
- 精通Visual C++图象编程---读书笔记6.2
- 精通Visual C++图象编程---读书笔记6.1
- 《精通Visual C++ 实效编程280例》读书笔记(第二章 菜单和光标)
- 精通Visual C++图象编程---读书笔记5
- 精通Visual C++图象编程---读书笔记4
- 精通Visual C++图象编程---读书笔记4
- 精通Visual C++图象编程---读书笔记3
- 《精通Visual C++ 实效编程280例》读书笔记(第四章 对话框)
- 转: Visual C++编程实现摄像头视频捕捉
- 进程编程2 – Unix环境高级编程8章读书笔记
- 翻译《有关编程、重构及其他的终极问题?》——30.Visual C++和wprintf()函数
- SQlite数据库的C编程接口(八) 工具函数(Utility Functions) ——《Using SQlite》读书笔记
- 【编程珠玑】读书笔记 第四章 编写程序
- Visual C++ ADO数据库编程入门(上)
- 《JavaScript DOM 编程艺术》(第二版)读书笔记(一)
- Java并发编程艺术----读书笔记(一)
- Oracle 9i 10g编程艺术 —— 读书笔记(一)