C++中的this指针
this总是指向当前对象,每次执行成员函数时,形如本例中的SetColor(int _color),总是会被编译成SetColor(CTestThis* this, int _color),编译器会自动带入对象地址作为this指针所指向的地址,本例中的全局函数也许可以加深对this指针的理解。
-
#include <iostream>
-
-
class CTestThis
-
{
-
public:
-
int GetColor() { return this->color; }
-
void SetColor(int _color) { this->color = _color; }
-
void Display() { std::cout << this->color << std::endl; }
-
-
private:
-
int color;
-
};
-
-
void SetColor(int _color, CTestThis* _)
-
{
-
_->SetColor(_color);
-
}
-
-
void Display(CTestThis* _)
-
{
-
std::cout << _->GetColor() << std::endl;
-
}
-
-
void main(void)
-
{
-
CTestThis test;
-
-
test.SetColor(3);
-
test.Display();
-
-
SetColor(33, &test);
-
Display(&test);
-
-
system("pause");
-
}
C++的继承与多态demo
继承(无虚函数):
-
#include <iostream>
-
-
class A
-
{
-
public:
-
void fun() { std::cout << "A::fun()" << std::endl; }
-
};
-
-
class B: public A
-
{
-
public:
-
void fun() { std::cout << "B::fun()" << std::endl; }
-
void fun2() { std::cout << "B::fun2()" << std::endl; }
-
};
-
-
void main(void)
-
{
-
A a;
-
a.fun(); // A::fun()
-
-
B b;
-
b.fun(); // B::fun()
-
b.fun2(); // B::fun2()
-
-
A* rA = &b;
-
rA->fun(); // A::fun()
-
std::cout << &b << " " << rA << std::endl;
-
-
B* rB = static_cast<B*> (&a);
-
rB->fun(); // B::fun()
-
rB->fun2(); // B::fun2()
-
std::cout << &a << " " << rB << std::endl;
-
-
system("pause");
-
}
多态:
-
#include <iostream>
-
-
class A
-
{
-
public:
-
virtual void fun(void) { std::cout << "A::fun()" << std::endl; }
-
};
-
-
class B: public A
-
{
-
public:
-
void fun(void) { std::cout << "B::fun()" << std::endl; }
-
void fun2(void) { std::cout << "B::fun2()" << std::endl; }
-
};
-
-
void main(void)
-
{
-
A a;
-
a.fun(); // A::fun()
-
-
B b;
-
b.fun(); // B::fun()
-
b.fun2(); // B::fun2()
-
-
A* rA = &b;
-
rA->fun(); // B::fun()
-
-
B* rB = static_cast<B*> (&a);
-
rB->fun(); // A::fun()
-
rB->fun2(); // B::fun2()
-
-
system("pause");
-
}
C++对象布局及多态实现的探索
系列文章:http://c.chinaitlab.com/special/dxdtbj/Index.html
(一)前言:http://c.chinaitlab.com/cc/basic/200906/787895.html
普通类对象:http://c.chinaitlab.com/cc/basic/200906/787895_2.html
普通继承类对象:http://c.chinaitlab.com/cc/basic/200906/787895_3.html
(二)虚函数的类的对象:http://c.chinaitlab.com/cc/basic/200906/787896.html
(三)虚函数的类的对象(2):http://c.chinaitlab.com/cc/basic/200906/787897.html
(四)类型动态转换和类型强制转换:http://c.chinaitlab.com/cc/basic/200906/787898.html
(五)普通成员函数的调用:http://c.chinaitlab.com/cc/basic/200906/787899.html
(六)虚函数调用:http://c.chinaitlab.com/cc/basic/200906/787900.html
(七)构造函数中的虚函数调用:http://c.chinaitlab.com/cc/basic/200906/787901.html
(八)普通的虚继承:http://c.chinaitlab.com/cc/basic/200906/787902.html
(九)菱形结构的虚继承:http://c.chinaitlab.com/cc/basic/200906/787903.html
(十)菱形结构的虚继承(2):http://c.chinaitlab.com/cc/basic/200906/787904.html
(十一)菱形结构的虚继承(3):http://c.chinaitlab.com/cc/basic/200906/787905.html
(十二)后记:http://c.chinaitlab.com/cc/basic/200906/787906.html
(十三)代码中定义的类的简单说明:http://c.chinaitlab.com/cc/basic/200906/787907.html
VS2005下各基本类型的size
系统信息 | |
---|---|
操作系统 | Windows XP Professional SP2 |
编译环境 | Microsoft Visual Studio 2005 |
CPU | Pentium(R) Dual-Core CPU E5200 @ 2.50 GHz |
数据类型 | 大小 |
---|---|
int | 4 |
char | 1 |
long | 4 |
double | 8 |
float | 4 |
short | 2 |
bool | 1 |
【20090820】C++培训日记-进阶1
今天学习的内容:this指针、继承(不使用虚函数)、多态、单继承与虚函数表
类模板练习
rt。。第一次玩这东西 = =
-
#include <iostream>
-
-
template <class T>
-
class CTem
-
{
-
public:
-
CTem(int i);
-
~CTem(void)
-
{
-
delete[] data;
-
}
-
-
T& operator [](int i)
-
{
-
return data[i];
-
}
-
-
private:
-
T* data;
-
};
-
-
template <class T>
-
CTem<T>::CTem(int n)
-
{
-
data = new T[n];
-
}
-
-
void main(void)
-
{
-
CTem<int> tem(5);
-
-
for(int i=0; i<5; i++)
-
{
-
tem[i] = i+1;
-
}
-
-
for(int i=0; i<5; i++)
-
{
-
std::cout << tem[i] << " ";
-
}
-
std::cout << std::endl;
-
-
system("pause");
-
}
C++里的静态成员函数为何不能用const?
细看const成员函数的定义:不会修改该对象的数据成员。
我们知道,访问成员函数时会自动带上this,形如CTest::SetColor(int color),会自动转换成CTest::SetColor(CTest* this, int color)。
在const成员函数时,实际转换成了CTest::SetColor(const CTest* this, int color)。
this指向的是一个const对象,const对象的数据成员是不能改变的。
而静态成员函数实际上是一个全局函数,没有this指针,根本不会访问到对象的数据成员,在此使用const就多此一举了。