自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

todototry的专栏

个人意见,高手多多指教!!!!!!

  • 博客(56)
  • 资源 (1)
  • 收藏
  • 关注

原创 统计文件的单词数

读文件的一行int main(){ ifstream infile; string filename; cout  cin >> filename; infile.open(filename.c_str()); string line; getline(infile, line, /n); infile.close(); vector wordsOfLine; string

2007-01-28 15:33:00 735

原创 ios_base::app方式不受seekp()的影响

凡写操作均是不受seekp()的影响int main(){    ofstream outfile("C://tst.txt", ios_base::app); //文件并不能中间修改,添加数据,所以app的方式,一旦执行写操作那么一定将文件指针定位到文件末尾    int i = 0;    while (true)    {        outfile.seekp(0, ios_base::

2007-01-26 18:11:00 2846 1

原创 istream::get(),getline(),putback()

istream::get(),getline(),putback(),peek(),unget()int main(){    char ch;    cin.get(ch); //cin:abcdef    cout     string str;    getline(cin, str);    cout     cin.putback(a); //cin:a    cin.get(ch)

2007-01-26 14:55:00 1246

原创 判断存在转义字符

bool is_inzyzifu(const string &str){    static string caps("//");    string::size_type pos = 0;    pos = str.find_first_of(caps, pos);    if (pos != string::npos)    {        return true;    }    else

2007-01-26 11:10:00 2361

原创 cin的判断

对于隐式转换的部分,其实cinfasle了,但是仍会转换成正确的int型,接着键入的则未接收在cinint main(){    int i;    cin >> i; //3.3    cout     int v;    cin >> v; //3.3    if (cin)    {        cout     }    else    {        cout     }    in

2007-01-26 10:28:00 792

原创 ostream_iterator的使用方法

int main(){    cout     int i;    vector ivec;    while(cin >> i)    {        ivec.push_back(i);    }    ostream_iterator output(cout, " "); //关联cout,设置分隔符    copy(ivec.begin(), ivec.end(), output); /

2007-01-26 10:09:00 1878 1

原创 删除字符串中标点符号

#include#includeusing namespace std;int main(){ string str; cout  cin >> str; cout  string caps(",.//""); string::size_type pos = 0; while ((pos = str.find_first_of(caps, pos)) != string:

2007-01-25 23:15:00 2347

原创 成员函数重载解析

1。类成员函数的重载解析之前先进行名字解析2。普通继承层次不存在优先级3。虚拟继承存在的个优先级,首先需的后续的概念class A{public:    void ok(int){cout };class B:public A{public:    void ok(){cout };class C:public B{};int main(){    C c;    c.ok(); //B::ok 

2007-01-25 17:34:00 692

原创 成员模板特化的概念_隶属相同的类

成员模板特化1。需是一个特化版本类的成员template class A { public:     template     static void fun();     template     static void fun(); }; template template void A::fun(){cout template template void A::fun(){cout  

2007-01-25 09:54:00 922

原创 模板参数表的写法

类模板名可以作为1。类型指示符,这时需加模板参数表,有的情况可以不加      在类域之中时,可以省略模板参数表,类域=类范围+类外函数定义(从函数名开始,前面的修饰,返回值类型忽略,到函数结束)2。函数名(构造函数,析构函数),这时无需加模板参数表,写上可以的 templateclass A{public:// A(){} //ok A(){} A(int i); A(con

2007-01-25 00:52:00 1099

原创 虚拟继承与二义性

当使用成员实例1。一个虚拟基类提供,一个是后续derived类提供时,无二义      因为后续优先      后续指虚拟基类的后续class A{public:    void ok(){cout };class B:public virtual A{};class C:public virtual A{public:    void ok(){cout };class D:public B,

2007-01-24 18:09:00 661

原创 继承机制的可用范围与实用范围

1。对于一个对象,对象的指针,引用      它的可用成员函数范围:由静态类型给出      它的使用函数范围:由动态类型给出2。pb的静态类型是B*,所以它能使用的范围是B的成员函数,所以f3()不能使用rb相同道理3。pb实际所使用的版本,由动态类型给出,D,所以f1()是D类版本class B{public:    virtual void f1(){cout     void f2(){c

2007-01-23 18:08:00 619

原创 继承机制的名字解析

继承机制名字解析:1。derived类的同名成员隐藏base类的同名成员,出于设计目的;      不会构成重载2。多继承的情形,derived类继承了多个base类的同名函数,这些函数之间不会报重复定义,      但是直接访问的话会二义,因为编译器解析的时候,只是用名字解析,而并的非根据参数类型进行重载解析class B1{public:    void ok(){cout };class B

2007-01-23 17:57:00 660

原创 虚拟函数的定义与声明

1。同名+同参数表+同返回值类型2。参数表不能兼容derived3。返回值类型可以兼容derived4。默认参数,const修饰可以使用,但需一致书写,否则语法对语义上不鲁棒const对虚拟函数:      (1)比如const用在Base,而Derived无const修饰时,这使Base的const对象才能使用此成员函数,而Derived的任何对象均可使用此virtual成员函数      

2007-01-23 14:14:00 979

原创 基类成员初始化的地方

基类成员初始化的地方:构造函数之前,成员初始化列表只是给基类构造函数传递参数的一个地方,一个机会,使用基类构造函数的时候在构造函数之前基类子对象初始化的工作必需交给基类构造函数执行,赋值工作可以的给派生类执行,在进入构造函数之前:初始化,构造函数之后:赋值class B{public:    int a;    int b;    int c;};class D:public B{public: 

2007-01-23 13:09:00 1239

原创 virtual的选择

1。与类型相关的,作为virtual支持动态绑定2。构造函数不能为virtual3。静态成员函数不能为virtualvirtual可以动态使用,可以静态使用理解:动态机制是根据对象的实际类型来选择执行,1。而构造函数时为建立完整的对象,所以根本无法执行动态机制,能修饰构造函数的只有inline2。静态成员,本质为个全局的量,可以在对象并未建立的时候进行使用所以也不能virtual

2007-01-23 11:48:00 676

原创 virtual +指针,引用 => 滞后联编

滞后联编只有在virtual函数支持时才起作用;virtual +指针,引用 => 滞后联编非virtual函数的时候,即使使用指针,引用也不能使用其动态类型class B{public: B(){a = 3; b = 33;} int a;private: int b;};class D:public B{public: D(){c = 333; d = 3333;} int

2007-01-22 23:44:00 1090

原创 new操作符与virtual

new操作符,静态成员函数不能成为virtual,它在对象构造完成之前进行使用virtual函数使用1。动;2。静;均为对象构造完成之时进行使用的,所以并不能作为virtual函数使用new操作符1。返回值需void*;2。参数size_t,自动初始化;3。使用在未构造完成的对象上;new和delete均为类的静态成员函数,自动成为静态的成员函数,无需显式指示class B{p

2007-01-22 22:37:00 654

原创 虚拟函数必需的实例化(具体类)或纯虚(抽象类)

derived类并非抽象类的时候,必需实例化虚函数否则报无法实例化base类的错误,从而无法实例化类对象class B{public:    virtual B* ok() = 0;};class D:public B{public://    virtual D* ok(){cout };int main(){    D d;//    d.ok();    return 0;}

2007-01-22 14:53:00 881

原创 默认私有继承

默认继承权限:privateclass B{public:    B(){a = 3;}    void display(){cout private:    int a;};class D:B{public:    void ok(){display();}};int main(){    D d;//    d.display();    d.ok();    return 0;}

2007-01-22 13:19:00 783

原创 构造函数不能被继承

1。派生类不能继承基类的构造函数,必需提供自个的构造函数,防止紧耦合      (继承一切成员,构造函数除外)2。析构函数同理,只是由于析构函数无参数需传递,所以似乎能合适的使用,      逻辑上,提供3。由系统隐式使用析构函数,缺省构造函数class B{public:    B(int){}};class D:public B{public://    D(){}    D():B(3){}

2007-01-22 11:58:00 1639

原创 静态成员本质

静态成员本质:    1。它就是个全局对象,占据内存,但是逻辑上属于类,物理上不属于,所以类对象的大小不包含静态成员的大小    2。它等价于          int a;          class A{};          然后保证这个a只供给类A使用,但这样写的话不能保证程序使用a,但声明成静态成员的话,C++的语法机制保证只供类A使用    3。综合以上两点,可以理解:静态成

2007-01-19 17:18:00 640

原创 纯虚函数

纯虚函数:1。在类继承体系中,在基类中作为的继承体系公有操作的占位符 2。在每个派生类中必需提供实体定义      理解:不提供实体定义的时候,派生类的也属于个抽象类,不能创建对象class B{public:    virtual void ok() = 0;};class D:public B{//    void ok(){cout };class E:public D{public:   

2007-01-19 15:39:00 462

原创 类内部的封装性

1。类本身提供了与外界隔离,数据保护,封装性      即除了成员函数,程序并无法对于其私有成员进行访问,修改2。在引入继承层次之后,在派生类的内部(它含有一个基类对象组成部分,之所以叫组成部分,因为它不独         立,之所以叫它部分,因为它本身又维护了一个小范围的封装性,数据保护)3。派生类继承了基类的所有成员,即使基类的私有成员,也是派生类对象的构成之一,实例化对象的时候,分   

2007-01-19 14:19:00 1360

原创 继承机制的两个特性:多态+动态绑定

多态:     基类的指针或者引用可以指向任何派生类对象的能力;(一般类型而言不允许,因为C++强类型语言,其他只有静态类型一说,对于指针和引用具有静态类型和动态类型两个方面)动态绑定:    1。(和虚拟函数永不分家,配合才能实现)          派生类存在一个函数,而基类无,则此时未建立虚拟函数机制,即使指针,或引用的动态类型是派生类类型,也并不能调用,一句话,没有虚拟函数存在,动态类型

2007-01-19 10:37:00 1035

原创 类模板的成员(三类)均为模板

template class A{public:    template     class B{};//    B b;  //类模板不能定义对象    static int ival;};template   //省略此句则会报错,可验证所有类模板的成员均为模板,int A::ival = 0;       //第一因素即为,成员的类型包括:1。属于什么类;2。数值类型;3。成员函数的   

2007-01-18 09:54:00 1103

原创 类模板的成员函数

类模板的成员函数1。涉及模板参数T的一定是个函数模板;2。 不涉及(形式上,函数体,参数表内没出现)模板参数T的也是个函数模板;       角度一:成员函数的类型中包含一个属性“属于什么类”,所以void A::fun(){};这是就和T建立了联系,这时就能说明即使函数体内不涉及T类型,它也是个函数模板,因为由不同T类型,是不同的函数类型(因为域概念是成员函数类型的一部分)(在类外的定义时需写

2007-01-17 17:26:00 2121

原创 专有类的方式

class A只能为class B使用,除此之外,其他均不能使用A类的对象,根本就不能建立方式一:友元法class A{    friend class B;  //一个普通类作友元声明的时候,无需先前声明或者定义,编译器会去找                                //如果是个类模板(绑定的非绑定的两种)作友元类的声明时,先前必需声明或定义       

2007-01-17 16:32:00 1110

原创 显式调用析构函数

1。显式调用的时候,析构函数相当于的一个普通的成员函数2。编译器隐式调用析构函数,如分配了对内存,显式调用析构的话引起重复释放堆内存的异常3。把一个对象看作占用了部分栈内存,占用了部分堆内存(如果申请了的话),这样便于理解这个问题      系统隐式调用析构函数的时候,会加入释放栈内存的动作(而堆内存则由用户手工的释放)      用户显式调用析构函数的时候,只是单纯执行析构函数内的语句,不会释放

2007-01-15 15:33:00 25238 3

原创 转换函数重载

class A{public:    A(int i = 3){ival = 3;}    operator int() const    {        return ival;    }    operator int()    {        return ival;    }private:    int ival;};int main(){    const A a;    int

2007-01-15 15:11:00 1009

原创 类影响函数重载的候选函数集

当函数的实参:1。类对象2。指向对象的指针3。对象的引用4。指向成员的指针时,重载函数的候选集大大扩大,类的友元函数加入候选集现在的问题是:类定义所在的名字空间的同名函数加入候选集呢(N1),还是类声明所在的名字空间的同名函数加入候选集(N2+N3,定义可以当作声明,声明可以多个)代码中的只能看见全局的add,待验证namespace N3{    namespace N2    {       

2007-01-15 11:06:00 851

原创 *p++语句

int main(){ int isz[3] = {1, 2, 3}; cout  int *p = isz; cout  cout  return 0;} 出现return *p++;之类的语句,是把当前p所指对象的值返回,然后再p指针指向下一个元素,因为是同一个语句所以在p指针移动之后,才return语句完整执行,把值返回的,这样写法可以省略一个临时对象来存放指针移动之前所指对象的

2007-01-13 16:26:00 1059

原创 重载operator ->的说明

重载operator ->目的是为了使一个类对象表现的像一个类型的指针一样如P类对象则表现的像一个A *的作用形式operator->的返回值有两种选择1。返回目的类型的指针       这时把operator->的语义运用在返回值上,也就是A *那个变量身上       注意是“语义”,就是说逻辑上的想作的,而并非语言形式2。返回另外一个对象的引用或者值,      然后递归上述1的过程,直到

2007-01-12 14:44:00 10912

原创 临时对象与左右值

临时对象是一个普通的对象,只是由于它并未提供对象名,同时也不像堆对象(无名对象)一样提供了对象的指针(即知道对象的地址),所以一般只用来作右值,但这并不说明没有左值属性一个对象必然有左值和右值,系统是否提供给用户使用则是另外一码事与对象相对的概念是文本常量,二者区别在于,是否能够寻址一个对象:左值(对象的地址值);右值(对象的数据值)不是说,一个对象拥有左值和右值,而是一个对象使用的时候,在某时作

2007-01-12 13:09:00 2045 2

原创 重载赋值操作符的分类

重载赋值操作符的分类:1。普通赋值操作符,参数可以是任何类型2。拷贝赋值操作符,参数是类类型,或类类型的引用一个操作符调用并的不影响类对象的类型,因为它相当于个函数调用,类对象作为一个参数(隐藏),函数怎么执行不会影响类对象的类型比如下面例程,operator返回const char *而并非的String&,这并不影响对象a仍然是String类型,一个对象(变量)的类型在定义的时候确定,非类型转

2007-01-12 10:31:00 128

原创 成员初始化列表和构造函数体中的区别

论坛中回答一个别人问题C++ Primer中在讲构造函数初始化列表的时候有这么一段话:无论是在构造函数初始化列表中初始化成员,还是在构造函数体中对它们赋值,最终结果是相同的。不同之处在于,使用构造函数初始化列表的版本初始化数据成员,没有定义初始化列表的构造函数版本在构造函数体中对数据成员赋值。请问这里的初始化数据成员与对数据成员赋值的含义是什么?有什么区别?我知道在数据成员有默认构造函数时是有不同

2007-01-11 13:08:00 5631

原创 重载操作符时不管类成员还是名字空间成员,对于参数都支持类型转换

class String{public:    String(){}    String(const char *){cout     bool operator ==(const String&){cout };bool operator == (const String &str1, const String &str2){    cout }int main(){    String str

2007-01-11 12:21:00 818

原创 符合类型(引用,指针)的两种不同形式的定义

1。符合类型(引用,指针)//数组是否属于       的两种不同形式的定义:       int a = 10;定义一个指针:       int *p = &a;       int (*pp) = &a;定义一个引用:       int &ra = a;       int (&rra) = a;2。而且变量定义语句的识别优先于函数调用class Test{public:   

2007-01-11 10:14:00 968

原创 两个方向的类型转换函数

class A{public: A(){} A(int i){a = i; cout /* A& operator+ (const A& rhs) {  cout   a += rhs.a;  return *this; }*/private: int a;};int main(){ A a(3); A b = 3; b = a + 3; return 0;} A a(3)

2007-01-10 22:39:00 734

原创 文本字符串常量的类型是常量字符数组(元素类型+各维维数)

论坛一个帖子编译报错,“T”is ambiguous.#includeusing namespace std;template int compare(const T &v1, const T &v2){ if(v1 if(v2 return 0;}int main(){ compare("hi", "world");//这里报错 return 0;}"hi" 类型是const

2007-01-10 21:59:00 1115

网络安全网络方案IP视频会议系统

IP视频会议系统 IP视频会议系统 IP视频会议系统 IP视频会议系统 IP视频会议系统 IP视频会议系统

2011-04-01

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除