一 类和对象
c语言 | c++ | ||
数据+算法 | 封装 | 继承 | 多态 |
数据与算法封装起来形成一个类 | 用类定义出对象 | 有多种的形态,重载函数等 |
#include<iostream> using namespace std; class person { public: //成员变量 char* m_name; int m_age; bool m_sex; //成员函数 void eat() { cout<<"吃饭"<<endl; } }; int main() { person ps; ps.m_name="张三"; ps.m_age=18; ps.m_sex=true; ps.eat(); system("pause"); return 0; }
二 访问修饰符
有三类访问修饰符private,public,protected,访问修饰符就是来区分类内的成员是否可以被访问,在类外和在类内被访问。
#include<iostream> using namespace std; //public 公共 类外可以访问 //private 私有 类外不可以访问 只有本类可以访问 //protected 保护 类外不可以访问 派生类可以访问 //默认为私有 class student { public: char* m_name; private: int m_age; protected: bool m_sex; public: void show(); }; void student::show() {cout<<m_name<<" "<<m_age<<" "<<m_sex<<endl; } int main() { student s1; cout<<m_name<<endl; cout<<m_age<<endl; //不可访问 cout<<m_sex<<endl; //不可访问 system("pause"); return 0; }
三 接口函数
一般类内的成员变量设为私有防止成员变量被随意修改,要是想要修改成员变量就有了接口函数,类内用来访问私有成员的方法。
#include<iostream> using namespace std; class student { char* m_name; int m_age; float m_score; public: void setname(char* name); char* getname(); }; void student::setname(char* name) { m_name=name; } char* student::getname() { return m_name; } int main() { student stu1; stu1.setname("tom"); cout<<stu1.getname()<<endl; system("pause"); return 0; }
四 构造函数和重载函数
用来初始化的函数,函数名与类名相同。重载函数则是名字相同的函数参数列表不同,体现出多态性,可以来让一个函数多种情况下使用
#include<iostream> using namespace std; class student { public: char* m_name; int m_age; float m_score; private: student(); }; int main() { student stu1;// 私有无法构造 systerm("pause") return 0; }
构造函数及其重载函数
#include<iostream> using namespace std; class student { public: char* m_name; int m_age; float m_score; public: student(); student(char* name); student(char* name,int age); void show(); }; student::student() { m_name="小明"; m_age=17; m_score=92.5; } student::student(char* name) { m_name=name; } student::student(char* name,int age) { m_name=name; m_age=age; } void student::show() { cout<<m_name<<" "<<m_age<<" "<<m_score<<" "<<endl; } int main() { student stu1; stu1.show(); student stu2("小张"); stu2.show(); student stu3("小李",16); stu3.show(); system("pause") return 0; }
不写任何student的构造函数,会自己创建一个空的构造函数,如果写了student构造函数的重载但没写student();的话,无法直接初始化 student stu;用new也一样
student *pstu =new student;//没有无参构造无法创建新的对象 student *pstu1 =new student("小明",17); pstu1->show();
五 初始化列表
用于初始化成员变量
#include<iostream> using namespace std; class student { public: char* m_name; int m_age; float m_score; public: student(char* name,int age,float m_score); void show(); }; student::student(char* name,int age,float m_score):m_name(name),m_age(age), m_score(score) { } //实现于作用域实现时 //格式 作用域+函数名+参数列表+:+成员变量(具体参数).... int main() { system("pause") return 0; }
初始化的顺序根据成员变量定义时的顺序 与初始化别表无关