1.C与C++的不同
C语言:面向过程,从主函数开始,往下面一个一个函数的执行
C++:面向对象,从主函数开始,从一个一个类开始
2.C++的三大特效 封装、继承和多态
封装:把数据和操作数据的函数绑定在一起,通过设置私有成员,限制对数据的访问。类包含私有成员(private)、保护成员(protected)和公有成员(public)成员。默认情况下,在类中定义的所有成员都是私有的,这样才能保证良好的封装性。把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
继承:继承就是新类从已有类那里得到已有的特性。 类的派生指的是从已有类产生新类的过程。原有的类成为基类或父类,产生的新类称为派生类或子类,子类继承基类后,可以创建子类对象来调用基类函数,变量等,达到代码重用的目的。比如鱼和动物是继承关系。可参考https://www.cnblogs.com/qianqiannian/p/6037520.html中的访问权限图和伪代码
多态:多态是指一个函数有多种状态。根据实际对象在运行期间动态调用相应的方法。就是向不同对象发送同一个消息,不同的对象在接收消息时会产生不同的行为
3.C++中的Struct和Class
struct默认访问控制属性是public的,而class默认的访问控制属性是private的
struct A
{
int x;
}
class B
{
int x;
}
A a;
a.x= 2; //对,默认访问控制属性为public
B b;
b.x= 2; //错,默认访问控制属性为private
4.C++编译时,如何区分同一类的不同对象调用相同的成员函数
它们的入口地址是相同的,同一个类的不同对象使用不同的内存段,内存之间数据是互不影响的,一般成员函数的第一个参数默认是this(可以不写),this指针指向调用这个函数的对象,所以可以给函数传入不同的参数,输出不同的值,而且互不影响。
class A
{
private:
int x;
public:
void foo() { cout << x; }
};
C++编译器会编译成(注意,这是原理展示,不代表说编译器会先转换成下面的代码再编译)类似下面的C语言代码
struct A
{
int x;
};
void A__foo(A * this)
{
cout << this->x;
}
所以
A a;
a.x = 1;
A b;
b.x = 2;
a.foo();
其实就是
A__foo(a);
所以肯定输出的是1而不是2
而且很明显,我们只需要一个A__foo函数,一个入口地址