随笔分类 -  C++学习

C++之继承
摘要:[其中一些文字转自某文章,现在找不到出处 - - ] C++继承可以提高代码的复用性,减少编码过程的劳动量。但是不能滥用继承关系。 一、使用继承关系主要遵循以下两个要点: 1.如果A类与B类是没有关系的,不能 用“为了使B类功能更多” 这个理由强用继承关系。 该干嘛干嘛。 2.如果B类使用到了A类的功能,还要分两种情况进行讨论。 在逻辑上,B是A的“一种”(a kind of),... 阅读全文
posted @ 2013-07-18 22:11 曾健 阅读(489) 评论(0) 推荐(0)
cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
摘要:【转】cin、cin.get()、cin.getline()、getline()、gets()等函数的用法原文地址:http://hi.baidu.com/kskr/blog/item/cb00cc3deadf45c49f3d6279.html学C++的时候,这几个输入函数弄的有点迷糊;这里做个小结,为了自己复习,也希望对后来者能有所帮助,如果有差错的地方还请各位多多指教(本文所有程序均通过VC 6.0运行)转载请保留作者信息; 1、cin 1、cin.get() 2、cin.getline() 3、getline() 4、gets() 5、getchar()1、... 阅读全文
posted @ 2013-03-19 20:38 曾健 阅读(183) 评论(0) 推荐(0)
C++ 友元
摘要:友元 == 有缘。没错~有缘之后可以做很多事情,比如去你家蹭吃蹭喝..C++中 类的友元(包括友元函数,友元类),可以访问该类的私有和继承变量。虽然破坏了封装性,却也为编程提供了便利。是一种共享数据的方式之一(除此之外还有,静态数据,全局变量)。下面描述友元应用的场景:现在有两个类A,B。B需要获取A中的private数据,有两种方式,通过接口获取数据,或者B(或其成员函数)成为A的友元直接访问数据。假设,调用数据非常频繁,这时使用友元就可以提高效率。但是,当A中的数据结构发生改变时,B的函数也要发生相应改变。接口的好处~封装的威力XD友元函数:在要成为其友元的类中声明该函数,并在函数前增加f 阅读全文
posted @ 2012-12-29 23:23 曾健 阅读(262) 评论(0) 推荐(0)
C++ 类的静态数据成员&静态成员函数
摘要:静态数据成员通常,每个对象都有各自的数据拷贝。(一个类实例化后,各个对象的数据是不相干的)但是有些情况,要求多个对象共享一个数据时,我们需要用到静态数据成员。具体使用方法是:在类中声明数据成员时,在前面加上关键词static 。例如 satatic int count;//表示count是静态数据成员这样每个不同的类对象就共享同一个count。初始化时要注意,必须使用类名引用,然后初始化。类似于int man::count = 1;ps:为什么不用全局变量?答:使用全局变量破坏了类的封装性,徒增麻烦。至于破坏封装性为什么会惹麻烦找时间再研究吧...静态成员函数静态成员函数可以解决由静态数据成员 阅读全文
posted @ 2012-12-29 22:51 曾健 阅读(227) 评论(0) 推荐(0)
C++构造函数
摘要:普通变量可以使用赋值号(=)赋值,但是由于类的数据成员众多,所以使用构造函数用于构造对象。构造函数也是类的成员函数,除了有成员函数的所有特征外,还有一些不同之处:构造函数的函数名跟类名一样,而且没有返回值。构造函数一般被声明为公有函数,除非我们不允许某个类生成对象则将它声明为private或protected属性。编译器碰到对象声明语句时,会自动生成对构造函数的调用语句,所以我们常说构造函数是在对象声明时由系统自动调用的。构造函数为成员变量赋值的方式有两种:1.初始化列表 2.在函数体内赋值在对一般变量初始化时,两种方式并没有太大区别。但是当类的成员变量是另一个类时(嵌套类),只能使用初始化列 阅读全文
posted @ 2012-12-29 15:10 曾健 阅读(174) 评论(0) 推荐(0)
C++ const关键词
摘要:const可以看做是弥补#define的不足而出现的。显然它的功能已经大大超过了#define。const可使用与变量与函数还有指针,引用,其实质都是一样“使不改变”。const用于变量与对象:const int test = 1;//用于普通变量,相当于#define test 1 //这样,test就是常量了,并且与#define相比,它可以参加逻辑运算。//用于类对象class A{ public: int num;};int main(){ const A testA; testA.num = 1;//报错,const对... 阅读全文
posted @ 2012-12-25 17:49 曾健 阅读(167) 评论(0) 推荐(0)
C++函数基础知识
摘要:【这里只是记录一些比较容易忽略的知识点。】内联函数内联函数的出现,解决了两个技术问题。1.当函数需要频繁调用,且函数体较短时,调用函数的开销(保存现场与返回地址)比函数本身的价值相比性价比不高。这时使用内联函数,直接把函数体嵌入到相应的代码位置,更有优势。2.其实宏定义(#define)也可以解决1中的问题,但是宏定义往往在传递参数时会让人迷惑。不利于代码维护,阅读。内联函数能解决宏定义带来的不确定性。内联函数的定义形式inline 类型标示符 函数名(参数列表){函数体};使用内联函数注意事项对于一个函数来说,是否是内联函数,是由编译器决定的。如果我们在函数面前加上inline关键词,只是表 阅读全文
posted @ 2012-12-23 14:56 曾健 阅读(373) 评论(0) 推荐(0)
C++联合体的内存使用
摘要:联合体占用内存大小是根据其最大元素所需要的内存所决定的,这就意味着,有下面的例子..#include <iostream>using namespace std;union test{ int k; struct{int x, int y,int z}a;}b;int main(){ b.a.x = 1; b.a.y = 2; b.a.z = 3; b.k = 0; cout<<b.a.x<<b.a.y<<b.a.z<<endl; return 0;}程序的输出结果是 023 ,而不是 123。这是因为,union是共用内存,后来的赋 阅读全文
posted @ 2012-12-20 01:01 曾健 阅读(1827) 评论(0) 推荐(0)
C++类的构造函数
摘要:转自百度文库问题我的问题是关于初始化C++类成员的。我见过许多这样的代码(包括在你的栏目中也见到过):CSomeClass::CSomeClass(){x=0;y=1;}而在别的什么地方则写成下面的样子:CSomeClass::CSomeClass():x(0),y(1){}我的一些程序员朋友说第二种方法比较好,但他们都不知道为什么是这样。你能告诉我这两种类成员初始化方法的区别吗?回答从技术上说,你的程序员朋友是对的,但是在大多数情况下,两者实际上没有区别。有两个原因使得我们选择第二种语法,它被称为成员初始化列表:一个原因是必须的,另一个只是出于效率考虑。让我们先看一下第一个原因——必要性。设 阅读全文
posted @ 2012-12-06 11:59 曾健 阅读(325) 评论(0) 推荐(0)