随笔 - 576  文章 - 0  评论 - 62  阅读 - 219万

随笔分类 -  C++

上一页 1 ··· 3 4 5 6 7
C++ 方法隐藏
摘要:1、过载:一个类中,方法名相同,形参表不同的方法。2、重写:子类与父类的virtual方法,方法名,形参表相同。3、考虑下面的情况,子类与父类方法名相同。 父类是virtual方法 形参表相同 ---> 构成重写 父类是virtual方法 形参表不同 ---> 隐藏父类方法 父类不是virtual方法 形参表相同 --->隐藏父类方法 父类不是virtual方法 形参表不同 --->隐藏父类方法4、只有在父类是virtual方法,且方法名,形参表相同,才构成重写。其他的情况都不构成重写,也不构成过载,子类同名不能过载父类的方法,只会隐藏父类的方法。5、只有在父类是vir 阅读全文
posted @ 2013-10-22 20:13 Andy Niu 阅读(2115) 评论(0) 推荐(0) 编辑
私有成员有没有被继承?
摘要:私有成员有没有被继承?私有成员被继承,只不过子类不能访问父类的私有成员。很好证明: 1 class Base 2 { 3 private : 4 int a; 5 }; 6 7 class Derived:Base 8 { 9 private :10 int b;11 };12 13 14 int _tmain(int argc, _TCHAR* argv[])15 {16 Base base;17 std::cout<<sizeof(base); // 418 19 std::cout<<std::endl;20 21 Derived de... 阅读全文
posted @ 2013-10-22 10:37 Andy Niu 阅读(2125) 评论(0) 推荐(0) 编辑
share_ptr
摘要:1、为了保证不会重复释放内存,auto_ptr的copy构造和copy赋值都是破坏性操作,执行后,导致右操作数的指针为0。这就出现了,copy构造或者copy赋值后,两个对象不相等了。2、auto_ptr的问题就是,一块内存只能有一个指针指向它,为了解决这个问题,使用share_ptr。3、share_ptr是如何实现的? a、内部有一个指向原始资源的指针。 b、内部维护一个share_count,记录有多少个指针指向该内存。 c、析构的时候,share_count>1,将计数减1;share_count==1释放内存。 d、考虑到每个share_ptr中都有一个自己的share_co. 阅读全文
posted @ 2013-10-21 19:09 Andy Niu 阅读(1096) 评论(0) 推荐(0) 编辑
auto_ptr
摘要:1、 int *pi = new int(1024); delete pi; // 释放pi指向的int对象占用的内存空间 pi = 0; // 将pi设置为0,不指向任何东西,为Null 注意:删除0值的指针是安全的,但是没有任何意义。对于上面的情况,先释放内存,再置为Null。顺序不能颠倒,如果颠倒了,会导致内存泄漏。2、在Stack上分配的内存,用完后,系统会自动释放,调用析构方法。在Heap上,通过new分配内存,必须使用delete,手动释放内存,如果忘记,会导致内存泄漏。如果重复释放内存,会破坏自由存储区,导致分配在上面的其他对象受到破坏。(Stack记录程序的执行过程,H... 阅读全文
posted @ 2013-10-21 18:56 Andy Niu 阅读(316) 评论(0) 推荐(0) 编辑
const 与过载
摘要:1、方法包括方法名,返回类型,形参表,修饰符。2、对于一个方法,const可以出现的地方有返回类型,形参表,和方法后(const成员方法)。3、返回类型的常量性(是否为const)不同,不能构成过载。为什么? 过载是编译时多态,也就是说,在编译的时候,已经确定下来调用哪个方法。对于又返回类型的方法,调用的时候,可能不处理返回值,这样的话,编译器就不知道该调用哪个方法了。4、我们知道,形参表不同可以构成过载。如果形参表相同,只是形参的常量性不同,能否构成过载? 形参为引用或者指针,可以构成过载,否则不能构成过载。为什么? 过载是编译时多态,必须在编译时确定调用哪个方法。 如果形参为引用或... 阅读全文
posted @ 2013-10-14 20:42 Andy Niu 阅读(276) 评论(0) 推荐(0) 编辑
C++ 声明与定义
摘要:一步一步讲起:1、C++程序生成可执行文件的过程:源文件(.cpp),经过预编译,生成编译单元;编译单元,经过编译,生成目标文件(.obj);目标文件,经过连接,生成可执行文件。2、预编译做的事情:对#include,#define进行文本替换。3、C++支持单独编译,也就是对每个编译单元进行单独编译。这就要求,编译单元是一个自包含的文件,也就是说,编译单元生成目标文件的时候,不需要其他的信息。因此,在编译单元内部,所有使用的东西,必须要有定义,或者有声明。定义的意思是:这个东西就放在这里,当然可以使用。声明的意思是:我有这个东西,但是这个东西放在其他地方,这样的话,就可以使用声明的东西了。4 阅读全文
posted @ 2013-10-13 09:33 Andy Niu 阅读(1806) 评论(0) 推荐(1) 编辑
C++ 构造方法
摘要:1、构造方法的作用是设置数据成员的初始值。2、定义一个类Person的实例person的时候,必定会调用Person的构造方法。调用构造方法分为两个步骤:第一步使用初始化列表,第二步在构造方法内部对成员赋值。3、对于初始化列表,肯定会执行。如果用户没有显式的调用,就会隐式的调用。然后才执行第二步,在构造方法内部赋值。4、对于初始化列表,对于隐式或者显式中没有初始化的成员,成员的取值取决于下面的情况: a、如果成员是类类型,使用默认构造方法。(注:对于这种情况,必须保证成员具有默认构造方法) b、如果是内置类型,分为下面两种情况: b1、person是全局变量,初始化为0 b2、... 阅读全文
posted @ 2013-10-12 16:57 Andy Niu 阅读(882) 评论(0) 推荐(0) 编辑
C++ 中特殊的用法
摘要:1、反斜杠 a、转义字符 b、强制换行,当一行代码很长时,在这一行中间加上反斜杠,分成两行,反斜杠前后不能有空格。在预编译的的时候,会合成一行。2、String^ 表明String是一个托管类型的指针,不需要人工释放,GC会做这件事。3、调用方法的时候在方法前加上(void) 编码规范往往要求:方法的返回值必须被处理。如果没有被处理,静态检查工具,会给出警告。通过在调用方法时在前面加上(void),明确告诉静态检查工具,不是我忘了处理方法的返回值,而是确实不需要处理方法的返回值。这里其实包括了,a、方法没有返回值,b、我就是不想处理方法的返回值。 阅读全文
posted @ 2013-10-12 16:27 Andy Niu 阅读(435) 评论(0) 推荐(0) 编辑
c_str()
摘要:1、c_str() 是string的一个方法,返回指向const char的指针,该指针不能修改指向的内容。2、为什么要用c_str()?因为有些地方需要用char指针,比如以char指针作为形参的方法。3、为什么可以用文本常量的字符串赋值给char指针,却不能用字符串变量赋值给char指针?1 char * cp1 = "hello"; // OK2 3 string str = "hello";4 5 cp1 = str; // Error,无法从“std::string”转换为“char *”View Code 文本常量字符串赋值给char指针,做 阅读全文
posted @ 2013-10-12 16:00 Andy Niu 阅读(567) 评论(0) 推荐(0) 编辑
C++ 友元
摘要:1、为什么要使用友元?面向对象的4个特征:继承,封装,多态,抽象。对于封装,也就是类的私有成员只有成员方法才可以访问。但是某种情况下,其他方法迫切需要访问类的私有成员,为了解决这个问题,C++开了一个窗户,通过定义方法为友元方法可以访问类的私有成员。2、友元方法不是当前类的成员方法,但是可以访问当前类的私有成员。3、如何使用?在一个类中,声明一个方法为它的友元方法,这个方法可以是普通方法,也可以是其他类的成员方法。4、延伸--友元类在一个类A中,声明一个方法Func为类A的友元方法,则Func可以访问类A的私有成员。那么,在一个类A中,声明类B为类A的友元类,则类B就可以访问类A的私有成员。 阅读全文
posted @ 2013-10-11 20:41 Andy Niu 阅读(360) 评论(0) 推荐(0) 编辑
C++ 操作符重载
摘要:1、为什么要使用操作符重载?操作符和方法在本质上一样,使用操作符更符合人性化的描述。2、操作符重载分为 普通操作符重载和成员操作符重载,区别在于: a、普通操作符重载要访问对象的私有成员,因此要设计为friend,而成员操作符重载不需要; b、相比于普通操作符重载,成员操作符重载,少了一个形参,因为成员方法总是与对象绑定使用的,被绑定的对象就是操作符的第一个参数;示例代码: 1 #include "StdAfx.h" 2 3 class Point 4 { 5 private : 6 int x; 7 int y; 8 9 public :10 Point ()... 阅读全文
posted @ 2013-10-11 19:59 Andy Niu 阅读(290) 评论(0) 推荐(0) 编辑
C++ 声明与引用
摘要:任何一个技术或者知识点,都是为了解决某个问题。也就是都有他的使用场景,或者说为什么搞出这种技术。1、解决的问题:现实生活中的例子,要使用一个工具,必要把工具放在这里,或者说我有这个工具。工具只能放在一个地方,但是可能在多个地方使用,只要说,我有这个工具就行了。2、解决办法:把工具放在一个地方,就是定义。说明我有这个工具,就是声明。3、有时候,要使用各种各样的工具,就要声明说,我要这些工具。把这些声明放在一个文件中,这个文件就是头文件。4、C++编译可以分别编译,编译过程分为:Compile和Link,在Compile的时候,使用的东西只要有声明就行了,会生成obj文件,在Link的时候,需要知 阅读全文
posted @ 2013-09-22 17:21 Andy Niu 阅读(1304) 评论(0) 推荐(1) 编辑
指针函数与函数指针
摘要:1、明确谁是主体,前面是定语,后面是主体。指针函数:返回指针的函数函数指针:指向函数的指针2、函数类型函数包括:函数名,返回类型,形参表,修饰符。函数类型表明一类函数,这一类函数的返回类型和形参表相同,而与函数名无关。一个函数,把函数名去掉,就是函数类型。比如:int Fun (int a) --- 函数Fun,函数Fun的类型为 int (int a);对于函数类型:在返回类型和形参表之间,加上一个函数名,就表示一个特定的函数。在返回类型和形参表之间,加上一个指针名,表示指向这一类函数的指针。3、区分int * Fun(int a ) :函数名为Fun,返回类型为 int*int (*Fun 阅读全文
posted @ 2013-09-18 16:47 Andy Niu 阅读(523) 评论(0) 推荐(0) 编辑
指针与const
摘要:修改指针有两个概念:1、修改指针使其指向另一个对象2、修改指针指向的对象的内容因此指针与const的组合有两个概念:1、指向常量的指针2、指针常量(不允许再指向其他对象)1 const int a =98;2 const int * ap1 = &a; // 指向常量的指针3 int const * ap2 = &a; // 指向常量的指针4 int * const ap3 = &a; // 指针常量,不允许ap3再指向其他对象简单记忆:const在*的左边,修饰常量,指向常量的指针;const在*的右边,修改指针,不允许指针再指向其他对象。 阅读全文
posted @ 2013-09-18 15:07 Andy Niu 阅读(312) 评论(0) 推荐(0) 编辑

上一页 1 ··· 3 4 5 6 7
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示