C++基础知识2(字符串、类、静态、this、继承、访问控制、覆盖、重载、友元)

字符串

std::string 字符串属于std类命名空间中的成员,代表字符串类型。
定义方式:std::string str;str即为string的对象,继承相应属性与功能。
对于字符串的简单常用操作有:

  1. 提取字符串:str.substr(pos,len); //返回当前对象str字符串从pos开始的长度为len的子串
  2. 比较字符串:可通过比较运算符进行比较(> < =等),例如对两个字符类对象 str1 > str2。
    也可以用相应行为 str1.compare(str2),进行比较
  3. 添加字符串:str1.insert(5, str2); // 在字符串str1的第五个位置插入str2,str1后的内存将被覆盖,也可以用str1 += “hahahahahahahahaha”;进行添加。
  4. 查找字符串:str1.find(“f”);//查找字符 f 在str1中的位置,相应的str1.rfind(“f”)为反向查找
    str1.find_first_of(“str2”) //查找字符串str2中任意字符在str1中最先出现的位置,相应的str1.find_last_of(“str2”)相反。

类与类的继承

简单框架:
class Car
{
1.属性(类中不允许定义只读常量,只能用静态只读常量来代替)
2.构造器:定义时默认执行的函数,名字必须与类名相同,可带参数,没有返回值。
3.析构器:函数退出后自动调用该函数,用于释放申请的空间,名字在类名前加~,不带参数,没有返回值。
4.行为
5.访问控制
};

//基类:可以派生出其他类,也称为父类或超类
//子类:从基类派生出来的类。

class SubClass : public SuperClass{…}
左继承右,并将继承的部分作为左类的public。

子类构造器在调用时,先执行基类构造器后再执行自身的构造器。
子类析构器在调用时,先执行自身的析构器后再执行基类析构器。

静态

静态属性:只能在定义的类中修改,对象无法修改写入,只能读取
静态方法:
静态成员是所有对象共享的,所以不能再静态方法里访问非静态的元素。所属空间不同
非静态方法可以访问类的静态成员,也可以访问类的非静态成员。

this指针

this指针:类自动生成、自动隐藏的私有成员,它存在于类的非静态成员函数中,指向被调用函数所在的对象地址。当一个对象被创建时,该对象的this指针自动指向对象的首地址。在任何方法中都可以使用this指针。
用于区分行为中传入参数与类成员同名情况,若没有参数名冲突下,在类调用中可以直接写变量名或函数代表类的属性与行为。
this的实例:
class Human{
char fishc;
Human(char fishc);
}
Human::Human(char fishc){
this->fishc = fishc;
}

访问控制

访问控制:作用范围直到下一个访问级别出现。同一类可以定义多次,但最好放一块,且按1->2->3级别。
1.public:任何代码
2.protected:这个类本身和它的子类
3.private:只有这个类本身
前面 class Subclass : public Baseclass是将基类的public部分作为public继承下来
也可以用class Subclass : protected Baseclass,继承过来的,对于除类本身和子类,其他访问不了
class Subclass : private Baseclass 只有这个类本身可以访问

覆盖

将继承过来的方法进行覆盖,函数的名字、参数、返回值都须一致,但需要在类中重新声明,然后就可以修改实现方法,这里覆盖了只是子类中的行为,基类仍然不变,此外子类中可通过基类::行为()进行访问。
实例:
class Animal
{
public:
void eat(void);
};
//子类
class Pig : public Animal //继承Animal
{
public:
void eat(void);//重新声明
};
void Animal::eat()
{
//基类源型
}
void Pig::eat()
{
Animal::eat();//子类中可以调用其父级的行为
//修改
}

重载

重载需要重新声明函数,名字返回值相同,参数不同。
只能对当前类行为(同名函数)做重载,根据参数的不同调用不同的实现方法。方便我们的调用和使用灵活;注意不能对基类或父级所继承过来的行为进行重载。
实例:
void eat(void);
void eat(int eatCount);//重载声明

友元

friend class
对于不是派生类的特殊关系,不受限制访问互为友元关系的类成员,包括protected与private。
实例:在Laddy中友元Gentleman 可以访问其所有成员
class Laddy
{
public:
Laddy(std::string name);
void say(Gentleman *man);
protected:
std::string name;

friend class Gentleman;

};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值