一.友元函数 友元函数在当前类外定义,不属于当前类的函数,要加上friend. 友元函数不属于任何类的非成员函数,也可以是其他类的 代码: #include <iostream> using namespace std; class address;//声明类 class student { private: char *m_name; int m_age; float m_score; public: student(char *name,int age,float score); void show(address *stu); }; class address { private: char *m_provice; char *m_city; char *m_qu; public: address(char *provice,char *city,char *qu); friend void student::show(address *stu);//友元函数 }; student::student(char *name,int age,float score):m_name(name),m_age(age),m_score(score){} address::address(char *provice,char *city,char *qu):m_provice(provice),m_city(city),m_qu(qu){} void student::show(address *stu) { cout<<m_name<<","<<m_age<<","<<m_score<<endl; cout<<stu->m_provice<<","<<stu->m_city<<","<<stu->m_qu<<endl; } int main() { student stu("xiaoming",20,89.1); address add("jiangsu","nanjing","jiangnin"); stu.show(&add); student *stu1 = new student("wamg",10,89.2); address *add1 = new address("jiangsu","nanjing","jiangnin"); stu1->show(add1); delete stu1; delete add1; return 0; } 友元类: 可以将整个类声明为另一个类的“朋友”,这就是友元类。 友元类中的所有成员函数都是另外一个类的友元函数。 二.string类 头文件:#include <string> 注: 1.定义但没有初始化,默认为空字符 2.与字符串不同,末尾没有‘\0’ 求字符长度可以用length() lenth返回的是字符串的真实长度。 insert函数,在一个字符串的指定位置插入另一个字符串或字符 注意:只能是string类型的参数可以使用 例子: #include <iostream> #include <string> using namespace std; int main() { string s1 = "123"; string s2 = "456"; string s3 = "abc"; char *s4 = "qwe123"; char s5[10] = "xxxxxx"; s1 = s1 + s2; cout<<s1<<endl; s1.insert(3,s3); cout<<s1<<endl; s1.insert(3,s4); cout<<s4<<endl; s1.insert(3,s5); cout<<s1<<endl; return 0; } 三.erase函数, erase函数: erase() 函数可以删除 string 中的一个子字符串。 它的一种原型为:string& erase (size_t pos = 0, size_t len = npos); pos 表示要删除的子字符串的起始下标,len 表示要删除子字符串的长度。 如果不指明 len 的话,那么直接删除从 pos 到字符串结束处的所有字符(此时 len = str.length - pos)。 substr函数: substr() 函数用于从 string 字符串中提取子字符串,它的原型为: string substr (size_t pos = 0, size_t len = npos) const; pos 为要提取的子字符串的起始下标,len 为要提取的子字符串的长度。 find函数: find() 函数用于在 string 字符串中查找子字符串出现的位置,它其中的两种原型为: size_t find (const string& str, size_t pos = 0) const; size_t find (const char* s, size_t pos = 0) const; #include <iostream> #include <string> using namespace std; int main() { string s1 = "123123"; string s2 = "456"; string s3 = "abc"; string s6; char *s4 = "qwe123"; char s5[10] = "xxxxxx"; s6 = s1.substr(3,9); cout<<s6<<endl; s1.erase(3,1); cout<<s1<<endl; s1.erase(3); cout<<s1<<endl; int index = s2.find("56",0); if(index < s2.length()) { cout<<"find"<<index<<endl; } else { cout<<"no"<<endl; } return 0; } 四.引用 为什么要引用? 1.C/C++ 禁止在函数调用时直接传递数组的内容,而是强制传递数组指针; 2.对于结构体和对象没有这种限制,调用函数时既可以传递指针,也可以直接传递内容; 语法格式为:type &name = data; type 是被引用的数据的类型,name 是引用的名称, data 是被引用的数据。 引用是变量的一个别名,通过这个别名或者原名都可以找到数据。 注意: 1.引用必须在定义的时候初始化。 2.引用在定义时需要添加&,在使用时不能添加&,使用时添加&表示取地址。 如果不希望通过引用来修改原始的数据,那么可以在定义时添加 const 限制,形式为: const type &name = value; 也可以是: type const &name = value; 例子:交换俩个数的值 #include <iostream> using namespace std; void swap1(int a,int b)//无法交换 { int temp; a = temp; a = b; b = temp; } void swap2(int *a,int *b)//传递指针,可以交换 { int temp = *a; *a = *b; *b = temp; } void swap3(int &a,int &b)//通过引用,也可以进行交换 { int temp = a; a = b; b = temp; } int main() { int a = 1; int b = 2; swap1(a,b); cout<<"a:"<<a<<",b:"<<b<<endl; swap2(&a,&b); cout<<"a:"<<a<<",b:"<<b<<endl; a = 1; b = 2; swap3(a,b); cout<<"a:"<<a<<",b:"<<b<<endl; return 0; } 在将引用作为函数返回值时应该注意一个小问题,就是不能返回局部数据。 五.继承 1.继承(Inheritance)可以理解为一个类从另一个类获取成员变量和成员函数的过程。 例如类 B 继承于类 A,那么 B 就拥有 A 的成员变量和成员函数。 2.被继承的类称为父类或基类,继承的类称为子类或派生类。 3.派生类除了拥有基类的成员,还可以定义自己的新成员,以增强类的功能 4.为什么要使用继承? (1)当你创建的新类与现有的类相似,只是多出若干成员变量或成员函数时,可以使用继承,这样不但会减少代码量,而且新类会拥有基类的所有功能。 (2)当你需要创建多个类,它们拥有很多相似的成员变量或成员函数时,也可以使用继承。可以将这些类的共同成员提取出来,定义为基类,然后从基类继承,既可以节省代码,也方便后续修改成员。 例子: #include <iostream> using namespace std; class people { private: char *m_name; int m_age; public: void set(char *name,int age); char *get_name(); int get_age(); }; void people::set(char *name,int age) { m_name = name; m_age = age; } char * people::get_name() { return m_name; } int people::get_age() { return m_age; } class student:public people { private: float m_score; public: void set_score(float score); float get(); }; void student::set_score(float score) { m_score = score; } float student::get() { return m_score; } int main() { student stu; stu.set("xiaoming",20); cout<<stu.get_name()<<","; cout<<stu.get_age()<<","; stu.set_score(98.9); cout<<stu.get()<<","<<endl; return 0; }
转载请注明原文地址: https://www.6miu.com/read-50030.html