- 博客(18)
- 资源 (16)
- 收藏
- 关注
原创 头文件相互包含的问题
#includeusing namespace std;class B;class A{// B b; B *b;};class B{ A a;};int main(){ return 0;}如果去掉注释行就会出现变异错误。因为在A对象中要开辟一块属于B的空间,而B中又有A的空间,是一个逻辑错误,无法实现的。在这里我们只需要把其中
2012-02-27 15:51:42 807
原创 重载输出操作符
#includeusing namespace std;class A{public: A(int x,int y) { a=x; b=y; } friend ostream &operator <<(ostream& S,A &c) { S<<c.a<<" "<<c.b<<endl; return S; }private:
2012-02-26 19:00:53 636
原创 静态成员变量和静态成员函数
#includeusing namespace std;class A{public: A() { total++; } void print() { cout<<total<<endl; } ~A() { cout<<"dis"<<endl; total--; }private: static int total
2012-02-26 16:31:18 597
原创 抽象类
只要类中包含一个纯虚函数该类就是抽象类。例程如下:#includeusing namespace std;class A{public: A() { } virtual void fun()=0; virtual void two()=0; virtual ~A() { cout<<"A Dis"<<endl; }};class
2012-02-26 15:23:08 513
原创 重载数组下表操作符
为了保证数组动态存储过程中不越界,可以利用C++的类定义一种更安全功能更强的类型,可以为该类定义重载下标操作符[]函数,例程如下: #includeusing namespace std;class A{public: A(){}; A(int l):length(l) { size=new char[length]; } ~A() {
2012-02-26 14:19:34 608
原创 cin与字符串输出
#includeusing namespace std;int main(){ char a[100];// cin>>a;// cin.get(a,13); gets(a); cout<<a<<endl;}使用cin>>a如果输入字符串带空格,则只输出空格前面的字符。解决的方法是下面两种输入方式。
2012-02-26 14:04:38 790
原创 动态联编
#includeusing namespace std;class A{public: virtual void fun() { cout<<"A"<<endl; }};class B:public A{public: virtual void fun() { cout<<"B"<<endl; }};int main()
2012-02-26 11:23:22 885
原创 继承与派生
多重继承可能会产生歧义性:#includeusing namespace std;class A{public: void print(){cout<<"A"<<endl;}};class B {public: void print(){cout<<"B"<<endl;}};class C :public A,public B{pub
2012-02-25 22:09:31 585
原创 操作符重载
1、前置自加操作符重载:#includeusing namespace std;class A{public: int a; A(int x):a(x){} A operator++() { ++a; return *this; } A(A& r) { cout<<"调用复制构造函数"<<endl; a=r.a; }
2012-02-25 16:12:45 618 2
原创 复制构造函数
调用构造函数进行强制类型转换:#includeusing namespace std;class A{public: int a; A(int x) { a=x; cout<<"constructor!"<<endl; }/* explicit A(int x) { a=x; cout<<"constructor!"<<endl;
2012-02-24 21:15:47 541
原创 引用
引用就是别名!别名的地址就是被引用的对象或变量的地址。 #includeusing namespace std;int main(){ int a=9; int &b=a; cout<<&a<<endl<<&b<<endl; return 0;}输出为:0012FF60 0012FF60 说明引用的地址与被引用的相同。我们可以定义一个对象的引
2012-02-24 19:30:07 499
原创 传递对象
按值传递对象时,会调用该对象的复制构造函数创建一个临时副本,如果返回值也是对象则又要调用该对象的复制构造函数来创建一个临时副本。例程如下:#includeusing namespace std;class A{public: A() { cout<<"调用构造函数"<<endl; } //复制构造函数 A(A&) { cout<<"调用复制构
2012-02-24 14:21:36 615
原创 引用
引用就是别名!别名的地址就是被引用的对象或变量的地址。 #includeusing namespace std;int main(){ int a=9; int &b=a; cout<<&a<<endl<<&b<<endl; return 0;}输出为:0012FF60 0012FF60 说明引用的地址与被引用的相同。我们可以定义一个对象的引
2012-02-24 11:38:59 541
原创 堆与栈的较量
数据在内存中的存放方式 栈:由编译器自动分配,并自动回收,该区域一般存放函数的参数,局部变量等。堆:一般由程序员手动分配,并手动撤销。若程序员不释放,程序结束时可能由操作系统回收。全局区:全局变量和静态变量是存储在一起的,初始化的全局变量和静态变量放在一个区域,未初始化的放在相邻的区域。程序结束后由系统释放。文字常量区:存放常量字符串,程序结束后由系统释放。程序代码区:存放函数
2012-02-24 11:17:35 595
原创 const用法大全
1. 限定符声明变量只能被读[cpp] view plaincopyprint?const int i=5; int j=0; i=j; //非法,导致编译错误 j=i; //合法 2. 必须初始化[cpp] view plaincopyprint?const int i=5;
2012-02-19 21:51:55 688
原创 类内静态函数和全局静态函数的相同点和不同点
1)全局静态函数只在本编译单元有效。 2)类静态函数,对比普通成员函数,没有this指针,不能访问非static成员。 3)要说二者相同点,都是c++名字控制的手段:全局静态函数被局限在一个编译单元,通俗的将就是在一个cpp文件中定义的全局静态函数在另一个cpp文件中不能被调用。例程如下;// main.cpp #include extern int he
2012-02-18 22:59:32 3595 2
转载 hpp.h与.h的区别
hpp,其实质就是将.cpp的实现代码混入.h头文件当中,定义与实现都包含在同一文件,则该类的调用者只需要include该hpp文件即可,无需再将cpp加入到project中进行编译。而实现代码将直接编译到调用者的obj文件中,不再生成单独的obj,采用hpp将大幅度减少调用 project中的cpp文件数与编译次数,也不用再发布烦人的lib与dll,因此非常适合用来编写公用的开源库。
2012-02-18 12:53:53 32702 4
原创 内联函数
#includeusing namespace std;inline void fun(int x);int main(){ int a; a=3; fun(a); return 0;}void fun(int x){ cout<<x<<endl;}一般情况下我们可以将类的数据成员设置为私有,而使用类的公有函数来访问他们,这样的好处是数据
2012-02-18 12:06:05 965 1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人