C++功在不舍(2012.07.06)
2012-07-06 18:35
169 查看
1.对为什么 类 中的成员函数的定义和声明不放在同一位置的理解?(为什么将成员函数的声明和定义分开?)
如果将class A的成员函数的声明和定义都写在类中,那么会默认地认为该成员函数为内联函数。
关于内联函数的解释,范磊老师的《从新手到高手C++全方位学习》一书中给出的定义是:(引号内内容摘自范磊老师的书中)
“当我们定义了一个函数之后,编译器就会在内存中为其创建一个指令集,当我们调用这个函数时,程序就会跳转到该指令集处。当程序运行完毕之后,程序又会返回到原来执行该调用语句的下一行继续执行。假如对该函数执行了上百次的调用,那么就要来回跳转上百次,这会严重影响程序的执行效率。”
结合,arm嵌入式的课程,我觉得应该类似于arm的中断机制:
2.不用void 和int float等开头的函数
构造函数和析构函数,与类有关。构造函数用来初始化对象。析构函数用来清除由构造函数创建的内存;当对象被销毁后清除它所占用的内存空间。
结合2的标题,构造函数和析构函数都不能有返回值。
3.成员指针运算符"->"(??应该??并不是之前自己理解的应用于所有的指针)
利用该符号,可以实现读取对象的内存地址并且访问该对象的成员的作用。
4.高效代码(C++的灵活之处)
5.编写类时容易遇到的问题
头文件中类的定义如下:
.cpp文件中的函数如下:
有delete p和没delete p差别:
(1)有delete p:会执行析构函数;
删除p指针所指向的对象,同时调用了析构函数,析构函数有删除了成员指针i指向的内存大小为int型的内存空间.这样所有在堆中开辟的内存空间全部删除并收回。
(2)没有delete p:不执析构函数
这是因为堆中创建的对象没有被删除,相应的析构函数也没有被执行,i所指向的int型空间也没有被删除。???这是为什么啊???
如果换做在栈中创建对象:
如果将class A的成员函数的声明和定义都写在类中,那么会默认地认为该成员函数为内联函数。
关于内联函数的解释,范磊老师的《从新手到高手C++全方位学习》一书中给出的定义是:(引号内内容摘自范磊老师的书中)
“当我们定义了一个函数之后,编译器就会在内存中为其创建一个指令集,当我们调用这个函数时,程序就会跳转到该指令集处。当程序运行完毕之后,程序又会返回到原来执行该调用语句的下一行继续执行。假如对该函数执行了上百次的调用,那么就要来回跳转上百次,这会严重影响程序的执行效率。”
结合,arm嵌入式的课程,我觉得应该类似于arm的中断机制:
2.不用void 和int float等开头的函数
构造函数和析构函数,与类有关。构造函数用来初始化对象。析构函数用来清除由构造函数创建的内存;当对象被销毁后清除它所占用的内存空间。
结合2的标题,构造函数和析构函数都不能有返回值。
3.成员指针运算符"->"(??应该??并不是之前自己理解的应用于所有的指针)
利用该符号,可以实现读取对象的内存地址并且访问该对象的成员的作用。
4.高效代码(C++的灵活之处)
{ int *p=new int(999); cout<<*p<<endl; delete p; }int *p=new int(999);定义指针,在堆中开辟内存空间,赋值一个语句就全都实现了。
5.编写类时容易遇到的问题
头文件中类的定义如下:
class A { public: A(); ~A(); int get()const{return *i;} //the function of the assignment of *i void set(int x){*i=x;} private: int *i; };值得注意的是,类的定义需要有分号来截止/终止。
.cpp文件中的函数如下:
A::A() { cout<<"构造函数执行中……"<<endl; i=new int(1000); } A::~A() { cout<<"析构函数执行中……"<<endl; delete i; } int main() { A *p=new A; cout<<p->get()<<endl; p->set(10); cout<<p->get()<<endl; delete p; return 0; }
有delete p和没delete p差别:
(1)有delete p:会执行析构函数;
删除p指针所指向的对象,同时调用了析构函数,析构函数有删除了成员指针i指向的内存大小为int型的内存空间.这样所有在堆中开辟的内存空间全部删除并收回。
(2)没有delete p:不执析构函数
这是因为堆中创建的对象没有被删除,相应的析构函数也没有被执行,i所指向的int型空间也没有被删除。???这是为什么啊???
如果换做在栈中创建对象:
A::A() { cout<<"构造函数执行中……"<<endl; i=new int(1000); } A::~A() { cout<<"析构函数执行中……"<<endl; delete i; } int main() { A a;//在栈中创建空间 cout<<a.get()<<endl; a.set(10); cout<<a.get()<<endl; return 0; }执行了析构函数。
相关文章推荐
- C++功在不舍(2012.07.09)
- C++功在不舍(2012.07.08)
- C++功在不舍(2012.07.07)
- Eclipse中使用CDT,minGW配置google unitest(同时配置c/c++编译环境)
- 详解c++指针的指针和指针的引用
- C++中的值传递 | 指针传递 | 引用传递
- C++作业4
- C/C++内存管理详解 堆 栈
- C++ 强制转换
- C/C++ Volatile关键词深度剖析
- 深入探索C++对象模型之指向成员函数的指针
- C++设计:接口与实现分离
- C++之pair
- c++:tcp/ip协议状态(转载)
- C++中字符串输入处理
- C++菱形继承
- 面试题:C++实现一个不能被继承的类
- 2017阿里C++研发工程师-校招-笔试模拟
- c++————学习记录(一)
- C++ Qt 核心机制:信号和槽