foobar

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  6 随笔 :: 14 文章 :: 0 评论 :: 0 Trackbacks

2007年12月3日 #

Advanced Test in C: The 0x10 Best Questions for C Programmers
posted @ 2007-12-03 15:12 foobar 阅读(176) | 评论 (0)编辑 收藏

2007年11月23日 #

 

#include <iostream.h>
class Base
{
public:
virtual void f(float x){ cout << "Base::f(float) " << x << endl; }
void g(float x){ cout << "Base::g(float) " << x << endl; }
void h(float x){ cout << "Base::h(float) " << x << endl; }
};
class Derived : public Base
{
public:
virtual void f(float x){ cout << "Derived::f(float) " << x << endl; }
void g(int x){ cout << "Derived::g(int) " << x << endl; }
void h(float x){ cout << "Derived::h(float) " << x << endl; }
};

void main(void)
{
Derived d;
Base 
*pb = &d;
Derived 
*pd = &d;
// Good : behavior depends solely on type of the object
pb->f(3.14f); // Derived::f(float) 3.14
pd->f(3.14f); // Derived::f(float) 3.14
// Bad : behavior depends on type of the pointer
pb->g(3.14f); // Base::g(float) 3.14
pd->g(3.14f); // Derived::g(int) 3 (surprise!)
// Bad : behavior depends on type of the pointer
pb->h(3.14f); // Base::h(float) 3.14 (surprise!)
pd->h(3.14f); // Derived::h(float) 3.14
}

class Base
{
public:
void f(int x);
};
class Derived : public Base
{
public:
void f(char *str);
};
void Test(void)
{
Derived 
*pd = new Derived;
pd
->f(10); // error
//why?            
just imagine multiple inheritance
}
posted @ 2007-11-23 20:44 foobar 阅读(253) | 评论 (0)编辑 收藏

 

 1 # include <iostream.h>
 2 void output( int x); // 函数声明
 3 void output( float x); // 函数声明
 4 void output( int x)
 5 {
 6 cout << " output int " << x << endl ;
 7 }
 8 void output( float x)
 9 {
10 cout << " output float " << x << endl ;
11 }
12 void main(void)
13 {
14 int x = 1;
15 float y = 1.0;
16 output(x); // output int 1
17 output(y); // output float 1
18 output(1); // output int 1
19 // output(0.5); // error! ambiguous call, 因为自动类型转换
20 output(int(0.5)); // output int 0
21 output(float(0.5)); // output float 0.5
22 }
posted @ 2007-11-23 20:35 foobar 阅读(389) | 评论 (0)编辑 收藏

void Func(char a[100])
{
cout<< sizeof(a) << endl; // 4 字节而不是100 字节
}
posted @ 2007-11-23 20:22 foobar 阅读(292) | 评论 (0)编辑 收藏

2007年11月15日 #

int atexit ( void ( * function ) (void) );               <cstdlib>

 The function pointed by the function pointer argument is called when the program terminates normally.

If more than one atexit function has been specified by different calls to this function, they are all executed in reverse order as a stack, i.e. the last function specified is the first to be executed at exit.

One single function can be registered to be executed at exit more than once.

C++ implementations are required to support the registration of at least 32 atexit functions.

Parameters

function
Function to be called. The function has to return no value and accept no arguments.

Return Value

A zero value is returned if the function was successfully registered, or a non-zero value if it failed.

Example

/* atexit example */
            #include <stdio.h>
            #include <stdlib.h>
            void fnExit1 (void)
            {
            puts ("Exit function 1.");
            }
            void fnExit2 (void)
            {
            puts ("Exit function 2.");
            }
            int main ()
            {
            atexit (fnExit1);
            atexit (fnExit2);
            puts ("Main function.");
            return 0;
            }
            

Output:

            Main function.
Exit function 2.
Exit function 1.

posted @ 2007-11-15 23:47 foobar 阅读(399) | 评论 (0)编辑 收藏

2007年6月4日 #

Initializer lists

In C++, it is the order of the class inheritance and of the member variables that determine the initialization order, not the order of an initializer list:



#include 
<iostream>

class CSomeClass
{
public:
CSomeClass(
int n)
{
std::cout 
<< "CSomeClass constructor with value ";
std::cout 
<< n << std::endl;
}

}
;

class CSomeOtherClass
{
public:
CSomeOtherClass() 
//In this example, despite the list order,
: obj2(2), obj1(1//obj1 will be initialized before obj2.
{
//Do nothing.
}

private:
CSomeClass obj1;
CSomeClass obj2;
}
;

int main(void)
{
CSomeOtherClass obj;
return 0;
}

posted @ 2007-06-04 11:11 foobar 阅读(183) | 评论 (0)编辑 收藏

仅列出标题