c++对象:封装、继承、多态

类:
成员变量属于类的对象上的;
静态成员变量不属于类的对象上
非成员变量不属于类对象上
this指针的本质是指针常量
this指针指向的是被调用的成员函数 所属的对象;可以解决名称冲突,也可以返回对象本身用*this(用引用的方式返回person & personAdd(p1){return *this}
常函数:成员函数后面加const 称这个函数为常函数
mutable int m_age;//加上const就是不能修改this指针指向的值,
而变量前加mutable是可以修改的,变量就特殊了

void showPerson() const
{
	this->m_age = 100;
}
常对象只能调用常函数;

封装
把属性,行为整体封装成一个类;
实例化:通过一个类,创建一个对象的过程;
属性和行为都成为成员
属性:成员属性、成员变量、
行为:成员函数、成员方法
访问权限:
public: 成员 类内可以访问、类外也可以
protected:成员 类内可以访问、类外不可以访问//儿子可以访问
private: 成员 类内可以访问、类外不可以访问//只有自己可以访问
构造函数:
进行初始化操作,没有返回值、函数名和类名相同;可以有参数、可以发生重载,
系统会空实现一个,如果自己写,就用自己的,构造函数由系统自动调用,只调用一次;

class person
{
public:
person()
{
cout << “test” << endl;
}
~person()
{
cout << “t” << endl;
}
};
void test01()
{
person p2;
}
int main()
{
person p1;
test01();
system(“pause”);
return 0;
}
结束的时候才会调用析构函数
在这里插入图片描述
匿名对象:当行构造,那行直接析构,
person(10)//

不要离用拷贝构造函数 初始化一个匿名对象
person p1;
person(p2);//==person p2;相当于无参构造一个p2,如果前面有person p2;则会报错;

隐式转换法:
person p4=10;//相当于 person p4= person (10);

括号法:
class person
{
public:
person()//默认构造
{
cout << “g” << endl;
}
person(int a)//有参构造
{
m_age = a;
cout << “ga” << endl;
}
person(const person &p)****//拷贝构造函数,加const防止修改
{
m_age = p.m_age;
}
~person()
{
cout << “x” << endl;
}
int m_age;
};
int main()
{
person p1;//默认构造函数不能写成person p1(),否则,编译器会认为是一个函数的声明:void func();
p1.m_age = 5;
int a = 10;
person p2(a);
person p3(5);
person p4(p1);
cout << p4.m_age << endl;
return 0;
}
拷贝构造的调用时机
使用一个已经创建完毕的对象来初始化一个新对象
值传递的方式给函数参数传值:值传递就会拷贝对象给一个临时的值;
值方式返回局部对象
c++编译器至少给一个类添加3个函数
默认构造、默认析构、默认拷贝构造
如果用户自定义有参构造,编译器不会再提供默认构造,但是会提供拷贝构造
如果用户自定义拷贝构造,编译器不会提供其他构造

同名函数****同名静态成员
子类对象可以直接访问到子类中同名函数
访问父类同名函数的时候要加作用域
当子类有同名函数的时候,会隐藏所有的父类同名函数
静态成员同理,
除此外还可以通过类名的方式访问son::m_A;
son::Base::m_A第一个::代表通过类名访问第二个::表示访问父类的成员

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值