//新建如图文件
//在头文件.h中声明,在.cpp中实现
//main.cpp代码如下
1 #define _CRT_SECURE_NO_WARNINGS 2 #include<iostream> 3 #include "test.h" 4 #include <string.h> 5 using namespace std; 6 7 int main() 8 { 9 //Student st ;//栈上,这个类的构造函数在类被定义为变量的时候,自动调用 10 Student *p = new Student("mike",10);//在堆上创建实例,不管在堆上,还是在栈里面,只要这个类成了一个对象,构造函数都会自动被调用(带参的函数)。 11 p->show(); 12 //p->add();//父类中是private 13 /*strcpy(p->name, "tom"); 14 p->age = 10;*/ 15 //p->set_money(500); 16 cout << "name = " << p->name << ",age = " << p->age<<endl; 17 cout << "money = " << p->get_money()<<endl; 18 delete p;//自动调用析构函数 19 system("pause"); 20 return 0; 21 }
//person.cpp代码
1 #include "person.h" 2 #include <stdio.h> 3 4 Person::Person() 5 { 6 7 } 8 9 void Person::show() 10 { 11 printf("show "); 12 } 13 14 void Person::add() 15 { 16 printf("add "); 17 }
//test.cpp
1 #define _CRT_SECURE_NO_WARNINGS 2 #include "test.h" 3 #include <stdio.h> 4 #include <string.h> 5 6 void Student::set_money(int n) 7 { 8 money = n; 9 } 10 int Student::get_money() 11 { 12 return money; 13 } 14 15 16 Student::Student(const char *_name, int _age, int _money) 17 { 18 strcpy(name, _name);//this 19 age = _age; 20 money = _money; 21 } 22 Student::Student() 23 { 24 memset(name, 0, sizeof(name)); 25 age = 0; 26 money = 0; 27 printf("hello world! "); 28 //classes = new char[100];//在构造函数中分配了100个char。 29 } 30 Student::~Student() 31 { 32 printf("调用了析构函数。 "); 33 //delete[]classes;//清理构造函数分配的堆空间内存。 34 }
//person.h
1 #ifndef PERSON_H 2 #define PERSON_H 3 4 5 class Person 6 { 7 private: 8 void add(); 9 public: 10 Person(); 11 void show(); 12 }; 13 #endif // !PERSON_H
//test.h
1 #ifndef TEST_H 2 #define TEST_H 3 4 #include "person.h" 5 6 class Student : public Person 7 { 8 public: 9 char name[10]; 10 char *classes; 11 int age; 12 private: 13 int money; 14 public: 15 void set_money(int n); 16 int get_money(); 17 Student(const char *_name, int _age,int money = 0);//构造函数重载 18 Student(); 19 ~Student(); 20 }; 21 22 #endif
//运行结果