
C++
majcos
请用一段话来描述您自己,如性格、爱好、生活态度、工作情况、受教育状况等。让大家更了解你,不要超过1000个汉字。
展开
-
看看程序的输出结果
#include using namespace std;class A{public: void f(){cout virtual void ff(){cout};class B:public A{public: virtual void f(){cout void ff(){cout};class C:public B{public: virtual void f原创 2005-11-16 22:40:00 · 689 阅读 · 0 评论 -
给const对象赋值
class T{public: const T& operator=(const T& t) const{return *this;}};void main(){ const T t; T t1; t = t1;}原创 2006-10-25 14:50:00 · 2108 阅读 · 0 评论 -
f(NULL)
#include #include using namespace std;void f(int x){ cout}void f(int *p){ cout}int main(){ //int *p = NULL; //f(p); f(NULL); return 0;}[vs2005]输出结果:void f(int x)原创 2006-08-05 14:38:00 · 752 阅读 · 0 评论 -
构造,析构,异常处理
1.假设有class A,new一个A的时候,在A的构造函数中抛出异常,那么此次new动态申请的内存会自动释放掉么? 系统会选择operator new 对应的operator delete来释放内存,如果找不到对应的operator delete,则内存泄露。(详见effective c++ item 52)2.默认情况下,new A的时候,如果内存不足,则抛出std::bad_alloc异原创 2006-08-09 22:09:00 · 803 阅读 · 0 评论 -
cast
Effective C++上有如下代码:class Window { // base classpublic: virtual void onResize() { ... } // base onResize impl ...};class SpecialWindow: public Window {原创 2006-08-03 22:32:00 · 731 阅读 · 0 评论 -
Linkage Types
Objects, references, functions, types, templates, and namespaces are all considered names. A name can have one of three linkage types: external linkage, internal linkage, or no linkage. The linkag转载 2007-02-06 20:11:00 · 1129 阅读 · 0 评论 -
STL中的stack的pop函数为什么不返回值?
STL中的stack的pop函数为什么不返回值?以前没有仔细想过,今天看异常安全部分,才知道了其中的缘由:假设pop需要返回一个值,实现如下templateclass T>T stackT>::pop(){ if( vused_ == 0) { throw "pop from empty stack"; } else { T result = v_[vused原创 2007-01-07 16:23:00 · 4257 阅读 · 0 评论 -
类成员函数的静态变量
class T{public: static void StaticVarInStaticFunc() { static int x = 0; ++x; cout"StaticVarInStaticFunc: "xendl; } void StaticVarInNormFunc() { static int原创 2007-01-04 17:55:00 · 1037 阅读 · 1 评论 -
今天使用模板特化所遇到的问题
templateclass T>void test(const T& t){ cout"void test(const T& t)"endl;}templatevoid testint>(const int& x){ cout"void test(const int& x)"endl;} 上述代码是可以在VS2005上编译通过的,另外一种写法是: templ原创 2007-01-01 21:02:00 · 1521 阅读 · 1 评论 -
子类指针不能转换为父类指针???
编译一程序,出现如下错误: main.cpp(51) : error C2664: void __thiscall vtkVolumeMapper::SetInput(class vtkImageData *) : cannot convert parameter 1 from class vtkStructuredPoints * to class vtkImageData *v原创 2007-03-08 11:02:00 · 2516 阅读 · 0 评论 -
C++ ODR
C++ 标准规定“每个程序应该只包含那个程序中用到的每个非内联函数或对象的一个定义”。然而在同一个程序中,一个类、枚举类型、具有内部链接的内联函数和和一个模板可能有不止一个定义——只要每个定义出现在一个独立的翻译单元即可。对于内联函数和模板的情况,常用做法是在头文件中编写它们的定义,然后在每个独立编译的源文件中使用 #include 引入它。定义的同等性这就引出一个问题:什么时候两个定义完转载 2007-01-17 16:03:00 · 1123 阅读 · 0 评论 -
总是把位运算的优先级搞错
犯了几次错误了。一下摘自:http://www.cppreference.com/operator_precedence.htmlC++ Operator PrecedenceThe operators at the top of this list are evaluated first. Precedence转载 2007-04-09 11:03:00 · 1236 阅读 · 0 评论 -
C++编程易范的错误
[美]Stephen R.Davis C/C++语言中有许多对初学者(甚至是有经验的编程人员)来说很容易范的错误。通晓这样的错误可使你免于陷入其中。忘记初始化指针 这种错误只是一般"忘记初始化变量"错误的一个特殊形式(C/C++中变量不会自动初始化,而Basic可以)。使这种错误更糟糕的原因是它的后果往往更加糟糕: void SomeFunction() { int *pn转载 2006-10-06 13:55:00 · 904 阅读 · 0 评论 -
c++ tips 2
class C{};sizeof(C)==1目的是为使这个class的object得以在内存中分配独一无二的地址name-mangling(编译器对一些名字进行修改)一般而言,具体继承并不会增加空间或者存取时间上的额外负担出现在derived class中的base class object 有其完整的原样性多继承:class T{ virtual ~T(){}};clas原创 2006-09-22 16:35:00 · 739 阅读 · 0 评论 -
sizeof以及乱七八糟的指针
下面的输出是?double* (*a)[3][6]; cout cout cout cout cout看见类似“double* (*a)[3][6]; ”的语句,把“(*a)”这一部分看作一个整体,不妨计为A,则a就是指向A的指针,则原语句“double* (*a)[3][6]; ”可以看作“double* A[3][6]; ”,于是A就表示一个二维数组,数组的元素为double*类型。那么a就原创 2005-12-28 09:22:00 · 839 阅读 · 0 评论 -
在类的非virtual函数中调用virtual函数
#include using namespace std;class B{public: virtual void vf(){cout void nf(){vf();}};class D1 : public B{public: virtual void vf(){cout };class D2 : public B{public: virtual void vf(){cout void nf(原创 2005-12-28 10:03:00 · 767 阅读 · 0 评论 -
new T and new T()
class T{public: T() { cout }}; int* p = new int(); //初始化为0 int* q = new int; //不初始化 cout cout T* t = new T;//调用默认构造函数 t = new T();//调用默认构造函数,这两者没有区别原创 2005-12-29 11:23:00 · 1128 阅读 · 0 评论 -
sizeof
为了提高CPU的存储速度,VC对一些变量的起始地址做了“对齐”处理。在默认情况下,VC规定各成员变量存放的起始地址相对于结构的起始地址的偏移量必须为该变量的类型所占用的字节数的倍数。如double 偏移量必须为sizeof(double)即8的倍数。各成员变量在存放的时候根据在结构中出现的顺序依次申请空间,同时按照上面的对齐方式调整位置,空缺的字节VC会自动填充。同时VC为了确保结构的大小为结原创 2006-03-14 19:01:00 · 1188 阅读 · 0 评论 -
char*p 和 char p[]
#include using namespace std;char* GetFromPointer(){ char* t = "GetFromPointer"; return t;}char* GetFromArray(){ char t[] = "GetFromArray"; return t;}int main(){ cout cout return 0;} //指针p原创 2006-03-14 13:02:00 · 936 阅读 · 0 评论 -
重载操作符operator()与用户自定义类型转换
class absInt {public:int operator()( int val ) {//重载操作符operator(————int result = val return result; |}原创 2006-02-26 14:11:00 · 1486 阅读 · 0 评论 -
volatile——多线程程序员最好的朋友
volatile——多线程程序员最好的朋友volatile修正符及让你的编译器为你检查竞态条件(race conditions)Andrei Alexandrescu董恒超 译 我不想破坏你的情绪,但这篇专栏针对多线程编程中最可怕的问题。如果说——正如前面一篇泛型所说的——写出意外安全(exception-safe)的程序很难,但写意外安全的程序和多线程编程比起来就是小孩子的玩意。 用到多线程转载 2006-09-05 10:49:00 · 1718 阅读 · 2 评论 -
C++中class与struct的区别
class与struct的区别很老的问题了。今天稍微总结了下,有遗漏的地方和错误的地方还望大家补充。关于使用大括号初始化class和struct如果定义了构造函数的话,都不能用大括号进行初始化如果没有定义构造函数,struct可以用大括号初始化。如果没有定义构造函数,且所有成员变量全是public的话,可以用大括号初始化。关于默认访问权限class中默认的成员访问权限是private的,而st原创 2006-09-11 10:36:00 · 777 阅读 · 0 评论 -
C++ tips 3
可以定义并且调用一个pure virtual function,不过它的调用只能被静态地调用,不能经由虚拟机制调用。这个性质对pure virtual destructor很有用。何时合成析构函数1.没有定义destructor2.基类或者成员有destructor要满足这两个条件才会合成。C++中所有的global objects都被放置在程序的数据段中,如果没有明确初始化他们,则他们所原创 2006-09-22 17:04:00 · 571 阅读 · 0 评论 -
判断一个字符是中文字符?
bool isChineseChar(const char ch){ return ( ch & 0x80)}原创 2006-05-16 21:33:00 · 1050 阅读 · 0 评论 -
C++ tips 1
C++相对C而言,可能会出现的时空额外开销:1.虚函数机制,动态邦定2.虚基类3.多重继承下的“一个derived class和其第二或者后继之base的转换”virtual table中有一个指向class所关联的type_info object对指针进行类型转换,大部分情况下并不改变一个指针所含的真正地址,他只影响“被指出的内存的大小和内容”的解释方式。 编译器合成default原创 2006-09-22 15:45:00 · 688 阅读 · 0 评论 -
_tprintf
_tprintf(TEXT("ERROR(%S %d):create file %s failed./n"), __FILE__, __LINE__, outfile_name); 不知道为什么%S换为小写的就打印一串问号原创 2007-04-19 11:27:00 · 10111 阅读 · 2 评论