疯子的博客

做一件事,专注一件事
c++地雷(待续)
1.构造函数调用构造函数
#include <iostream>
using namespace std;

class A
{
public:
	A(char c)
	{
		m_c=c;
	}
	A(int a)
	{
		A('c');//这个调用不会改变对象
	}
	void display()
	{
		cout<<m_c<<endl;
	}
private:
	char m_c;
};
void main()
{
	A a1(1),a2('c');
	a1.display();//输出空
	a2.display();//输出c
	system("pause");
}
 
2.下面这个例子说的是封装是相对于类而非对象的
#include <iostream>
using namespace std;
class B
{
private:
	int m_a;
public:
	void seta(B& b,int a)
	{
		b.m_a=a;//访问别的对象的私有成员
	}
	void display()
	{
		cout<<m_a<<endl;
	}
};
void main()
{
	B b1,b2;
	b1.seta(b1,5);
	b1.seta(b2,6);//这里也可以的
	b1.display();
	b2.display();
}
 
3.临时对象,在函数调用和返回对象时
class C
{
public:
	C(){cout<<"C()"<<endl;}
	C(int i){cout<<"C(int i)"<<i<<endl;}
	~C(){cout<<"~C()"<<endl;} 
	C(const C& c){cout<<"C(const C& c)"<<endl;} 
};
C play(C a)
{
	return a;
}

	
void main()
{
	{
		C c=play(1);
		C c1=play(c);
	}
	system("pause");
}
结果:

C(int i)1
C(const C& c)
~C()
C(const C& c)
C(const C& c)
~C()
~C()
~C()
请按任意键继续. . .

4.小试一下传值和传引用

class CBase
{
public:
	virtual void Test() const { cout << "Output from CBase!" << endl; };
};

class CDerived : public CBase
{
public:
	virtual void Test() const { cout << "Output from CDerived!" << endl; };
};


void Test1(CBase test)
{
	test.Test();//Output from CBase! 
}

void Test2(const CBase& test)
{
	test.Test();//Output from CDerived! 
}

posted on 2010-07-17 18:56  老陈  阅读(404)  评论(0)    收藏  举报