//返回值问题
char *Add(char a, char b)
{
//分配
char *p = new char[2];
//strcpy
strcpy(p, &a);
//不能使用+
return strcat(p, &b);
}
string Add(string a, string b)
{
//1.连接方式
//2.append
return a.append(b);
}
回顾:
1.类?方法?属性?
2.定义类
3.定义数据成员+成员函数
4.构建对象+初始化对象
-------------------------------------------------------------
构建对象的过程:调用构造函数
构造函数:初始化基本成员
调用方式:系统调用
定义形式:
类名(参数列表){函数语句};
可重载
可缺省参数
注意点:
1.函数名与类名一致
2.函数没有返回值
3.有一个默认的构造,如果你写了构造函数,默认的构造没有了
4.构造函数只能是public属性
5.不能够自己调用
析构函数:释放构建对象的过程动态申请内存
定义形式:
~类名()
不可以重载
没有参数
存在默认构造函数
注意点:
1.函数名与类型一致
2.函数没有返回值
3.没有参数
4.不能重载
5.对象作用结束后
拷贝构造函数:实现一个对象给另一个对象初始化 (默认的构造函数)
定义方式:
类名(对象的引用)
参数只有一个;
1.浅拷贝
1.1:默认的拷贝构造函数(相当于赋值)
1.2:不涉及动态内存分配的拷贝构造函数
2.深拷贝
2.1:涉及到指针
2.2: 涉及到指针的动态分配
类的组合:
1.构造函数的调用顺序:对象的构建次序
2.析构函数的调用顺序:对象的析构顺序
1 //构造与析构.app 2 #include<iostream> 3 #include<string> 4 using namespace std; 5 6 class GirlFriend 7 { 8 public: 9 GirlFriend(){} 10 //GirlFriend(int x, int y) 11 //{ 12 // //形参和基本数据成员一致的时候 1.this 2.初始化参数列表 13 // this->x = x; 14 // this->y = y; 15 //} 16 17 //初始化参数列表 --->构造函数独有 18 GirlFriend(int a, int b) :x(a), y(b){}; 19 void show(); 20 protected: 21 int x; 22 int y; 23 private: 24 }; 25 26 void GirlFriend::show() 27 { 28 cout << "GirlFriend.x=" << x << endl; 29 cout << "GirlFriend y=" << y << endl; 30 } 31 int main() 32 { 33 GirlFriend mGirlFriend; 34 GirlFriend IGirlFriend(1, 2); 35 mGirlFriend.show(); 36 IGirlFriend.show(); 37 38 system("pause"); 39 return 0; 40 }
1 //析构函数.cpp 2 #define _CRT_SECURE_NO_WARNINGS 3 #include <iostream> 4 #include <string> 5 using namespace std; 6 7 class BoyFriend 8 { 9 public: 10 BoyFriend(char *xname) 11 { 12 //坑注意点 动态分配多大空间 13 //1 strlen(xname)+1 14 name = new char[strlen(xname) + 1]; 15 strcpy(name, xname); 16 cout << "name1:" << name << endl; 17 } 18 19 void show() 20 { 21 cout << "name2:" << name << endl; 22 } 23 ~BoyFriend() 24 { 25 delete[]name; 26 cout << "析构被调用" << endl; 27 } 28 private: 29 30 protected: 31 char *name; 32 33 }; 34 35 36 int main() 37 { 38 //{} 作用限定符 39 { 40 char name[] = "不销魂"; 41 BoyFriend yourFriend(name); 42 yourFriend.show(); 43 } 44 45 system("pause"); 46 return 0; 47 }
1 //拷贝构造函数.cpp 2 #include <iostream> 3 #include<string> 4 using namespace std; 5 6 class yourfriend 7 { 8 public: 9 int age; 10 char *name; 11 yourfriend(){}; 12 yourfriend(int age, char *name):age(age), name(name){}; 13 //拷贝构造函数 14 yourfriend(yourfriend &me) 15 { 16 age = me.age; 17 name = new char[10]; 18 name = me.name; 19 } 20 void show() 21 { 22 cout << "age\t" << age << endl; 23 cout << "name\t" << name << endl; 24 } 25 ~yourfriend() 26 { 27 delete []name; 28 29 } 30 }; 31 32 int main() 33 { 34 yourfriend me(12, "dabu"); 35 yourfriend I(me); 36 I.show(); 37 yourfriend your = I; 38 your.show(); 39 system("pause"); 40 return 0; 41 }
1 //类的组合.cpp 2 #include <iostream> 3 using namespace std; 4 //类的组合 5 class A 6 { 7 public: 8 int a; 9 A(int a) :a(a) 10 { 11 cout << "\tA::A(a)" << endl; 12 } 13 void show() 14 { 15 cout << "\tA::a" << a << endl; 16 } 17 ~A() 18 { 19 cout << "\tA::~A()" << endl; 20 } 21 }; 22 23 class B 24 { 25 public: 26 int b; 27 B(int b) :b(b) 28 { 29 cout << "\tB::B(b)" << endl; 30 } 31 void show() 32 { 33 cout << "\tB::b" << b << endl; 34 } 35 ~B() 36 { 37 cout << "\tB::~B()" << endl; 38 } 39 }; 40 41 class C 42 { 43 public: 44 int c; 45 B b; //先构建对象b 46 A a; //在构建a 47 //注意点,以类的对象为基本成员的时,构造函数把自己成员初始化也要把组合类成员初始化 48 //初始化,构建过程 49 C(A a, B b, int c) :a(a), b(b), c(c) 50 { 51 cout << "\tC::C(a,b,c)" << endl; 52 } 53 void show() 54 { 55 cout << "\tA.a=" << a.a << endl; 56 cout << "\tB.b=" << b.b << endl; 57 cout << "\tC.c=" << c << endl; 58 } 59 ~C() 60 { 61 cout << "\tC::~C()" << endl; 62 } 63 }; 64 65 int main() 66 { 67 //一般写法: 68 //{ 69 A a(1); 70 B b(2); 71 C c(a, b, 3); 72 c.show(); 73 //} 74 75 //直接构建 76 { 77 //1.对象的构建顺序只和声明顺序有关,有初始化参数列表无关 78 //2.和构造函数顺序相反 析构顺序 79 //C c(1, 2, 3); 80 ////二次析构是析构C中A,B 81 //c.show(); 82 } 83 84 system("pause"); 85 return 0; 86 }
1 //homework04.cpp 2 #include <iostream> 3 #include<string> 4 #include<stdio.h> 5 6 using namespace std; 7 8 class student 9 { 10 public: 11 char *name; 12 int age; 13 int fen; 14 char *sex; 15 16 student(){}; 17 student(char *n, int a, int f, char *s) :name(n), age(a), fen(f), sex(s){}; 18 student(student &me) 19 { 20 age = me.age; 21 fen = me.fen; 22 name= new char[20]; 23 sex = new char[6]; 24 name = me.name; 25 sex = me.sex; 26 27 } 28 29 void input(/*char *n, int a, int f, char *s*/) 30 { 31 char *Name = new char[20]; 32 cout << "请输入名字:"; 33 cin >> Name; 34 name = Name; 35 36 cout << "请输入年龄:"; 37 cin >> age; 38 39 cout << "请输入分数:"; 40 cin >> fen; 41 /* fflush(stdin); 42 getchar();*/ 43 char *Sex = new char[20]; 44 cout << "请输入性别:"; 45 cin >> Sex; 46 sex = Sex; 47 48 } 49 void show(); 50 51 /*~student() 52 { 53 delete[]name; 54 delete[]sex; 55 }*/ 56 protected: 57 58 private: 59 }; 60 61 void student::show() 62 { 63 cout << "\t姓名 \t年龄 \t分数 \t性别" << endl; 64 cout << "\t" << name << "\t" << age << "\t" << fen << "\t" << sex << endl; 65 } 66 67 int main() 68 { 69 { 70 student dabu("dabu", 25, 80, "man"); 71 dabu.show(); 72 cout << endl; 73 74 student who; 75 student *pnew = &who; 76 pnew->input(); 77 pnew->show(); 78 79 } 80 81 82 83 84 system("pause"); 85 return 0; 86 }
来源:https://www.cnblogs.com/tiantiancode/p/11138061.html