c++基础知识杂记
来源:互联网 发布:ls xgb plc编程软件 编辑:程序博客网 时间:2024/05/16 13:07
发现一直以来写的都是c风格的,后来用oc也是c风格的伪c++代码,搞得c++的基础忘了好多。。
1、声明与定义
一个错误经常遇到吧,“undefined reference to ....”,这里的reference其实就是定义,所以就是未定义的错误。相应的,如果你没有声明一个变量则报的是“undeclared identifier”,undeclared就是未声明的意思。当然,还有一个错误你也会遇到“can't find...”,目前来看这个错误应该是你使用外部函数或变量的时候没有找到,是一种连接时错误,可以叫做找不到...(不过这个错误只是凭印象记下来的,没有特意去验证)。
看有博主说,定义就是一个变量分配存储空间的行为。那么
class a {
private:
int m_iT;
}
这里m_it就是一个变量的定义。那么存在成员变量的声明吗?说实话,对于类的普通成员变量我现在还没想到只声明不定义的写法(如果有欢迎指正)。但是,静态成员变量就存在了,如果如下写:
class a {
private:
static int m_iT;
}
那么,此处由于并未分配存储空间,个人认为此处是对静态变量的一个声明,而不是定义。因此,静态成员变量也就必须在后来类的外部进行初始化,在这个动作里完成变量空间的分配,完成变量的定义。这个判断的原因在这里可以给出:经过实验,如果一个静态成员变量没有类外的初始化,会报“ undefined reference to 'log::m_bInitialised”错误。
再延伸一点,对于c里面的变量,存在一个外部变量的含义,当你使用一个外部定义的变量时你需要使用extern关键字进行声明,这也是变量声明的一个现象。
成员变量说完了,说下成员函数,其实正常来说,成员函数的定义应该如下:
class Point{
private: int m_ix;
int m_iy;
public:
void Set(int a,int b)
{ x=a; y=b; }
};
class Point{
private: int m_ix;
int m_iy;
public:
void Set(int a,int b);
};
class.cpp中:
#include "class.h"
void Point::Set(int a, int b) {
x=a;
y=b;
}
这样也就造成了成员函数的声明和定义分离,在.h头文件中是成员函数的声明,在cpp文件中是其定义。这种写法也叫做成员函数的类外定义。
2、如果定义了如下类:class a {
public:
void func1();
void func2();
}
在cpp中定义的时候,如果func1这么写:
void a::func1() {
a::func2();
func2();
this->func2();
}
这三行调用有区别吗?个人认为对于普通成员函数,这三者是没什么区别的,由于在a::func1中调用,所以带不带a::没有区别了,而普通成员函数的使用必然会先实例化,所以就会有对象指针this的存在。当然,静态成员函数就不是了,也会报错。
暂时先这些吧,有别的遗忘的到时候再补充。(待续...)
- 软件测试基础知识杂记
- Android基础知识杂记
- c++基础知识杂记
- Java基础知识杂记
- C杂记
- Java多线程基础知识杂记1
- C#-杂记(临时)
- C杂记(1)
- C杂记(1)
- C杂记 (2)
- 51C语言杂记
- c语言杂记
- C语言杂记
- linux C线程杂记
- C语言编程杂记
- C语言杂记
- C语言杂记1
- C语言笔记杂记
- D
- Java RandomAccessFile Properties 与装饰着设计模式
- Python class中的__call__()方法
- Android导入第三方静态库.a编译成动态库.so
- git案例
- c++基础知识杂记
- GitHub新手使用教学(从安装到使用)
- Android Notification和权限机制探讨
- python函数—定义参数的几种方式
- PAT(乙) 1009. 说反话 (20)
- Android EditText被软键盘遮盖
- Fluid Mask 3.3.17 for Windows 最新版 简体中文汉化包 简单易用的抠图软件
- Unity3d 如何优化内存
- 继续坑自己,EmguCV之SVM.Train