1. 如何判断变量是申明还是定义?
如果这个变量开辟了空间,那么这个变量就属于定义,否则这个变量就是申明。一些基本的知识需要知道,如全局变量开辟了空间,类中的变量是没有开辟空间的,当你用值来赋值给类中的变量时,此时类中的变量就开辟了空间。你可以理解为类中的变量是图纸,当你赋值时,类中的变量这个图纸给你做了一栋房子,然后把你的值放进去这个房子里了。还需要注意两个例子:
int age 是定义,extern int age 属于申明;申明不会进符号表,定义会进符号表
int age (age是全局变量)与 static int age是可以同时存在的,不会出现“出现相同的全局变量”这种情况,全局变量相同时链接会出现问题,而 int age 是全局变量是所有文件可读,static int age 是当前文件可读,进行连接时不会出现问题。
2. 如何计算类的对象的大小?
计算类的大小时,不考虑申明的函数的大小,因为申明的函数在公共代码区,如果一定要考虑大小,那么这个函数的大小要么是4字节要么是8字节,因为函数以指针形式存在!剩下的变量按照结构体内存对齐的规则进行计算。
还需要知道的一点是,空类的大小为1字节。空类是指没有成员变量的类,但是可以有成员函数,这1字节是占位,标识对象存在,不存储实际数据。
3. this指针
C++非静态的成员函数第一个位置都有一个隐含的参数,参数名字规定死了就叫this指针。如
class data
{
public:
void printA()
private;
int _a
}
实际情况是
class data
{
public:
void printA(data* const this)
private;
int _a
}
需要注意的是,this指针存在栈中,因为this是形参。
另看如下一张网络截图增加理解:
4.命名规则
C++命名变量前一般加_,如_Year,这样做是防止与函数形参重名,如Year = Year 就不知道是谁赋值给谁了,特别容易出错,一般Year形式用在函数形参中,_Year则不是。
命名规则:
a)单词和单词之间首字母大写,这叫驼峰法。如GetYear。这种形式C++居多
b)单词全部小写,单词间用_分割,如get_year。这种形式Linux居多
驼峰法:
1)函数名,类名等所有单词首字母大写;如DataMgr
2)变量首字母小写,后面单词首字母大写;如dataMgr
3)成员变量,首字母前面加_;_dataMgr
5.C++类型
内置类型:内置类型指C++语言自带的类型。如int,double,char,指针等等
自定义类型:struct,class等