C++基础

10 篇文章 0 订阅

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函数,一个入口地址

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值