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!
}
浙公网安备 33010602011771号