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

mac2024-05-29  39

字符串

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

提取字符串:str.substr(pos,len); //返回当前对象str字符串从pos开始的长度为len的子串比较字符串:可通过比较运算符进行比较(> < =等),例如对两个字符类对象 str1 > str2。 也可以用相应行为 str1.compare(str2),进行比较添加字符串:str1.insert(5, str2); // 在字符串str1的第五个位置插入str2,str1后的内存将被覆盖,也可以用str1 += “hahahahahahahahaha”;进行添加。查找字符串: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)