1.C++类和对象
类与结构体一样,有相似之处,从今天开始学习。加油。
1.1类的声明与对象的创建
声明
class Student{
public:
char *name;
int age;
public:
void print(){
printf("%s--%d",name,age);
}
protected:
private:
};
创建
Student stu1;
stu1.name="Wendy";
stu1.age=25;
stu1.print();
完整示例
#include "iostream"
#include "vector"
#include "string"
using namespace std;
int main(){
class Student{
public:
char *name;
int age;
public:
void print(){
printf("%s--%d",name,age);
}
protected:
private:
};
Student stu1;
stu1.name="Wendy";
stu1.age=25;
stu1.print();
return 0;
}
1.2类的成员变量和成员函数
在定义类的时候不能对成员赋值,类是一种数据类型,不占用内存,而变量的值需要内存来存储。
类本身不占内存,但是经过类声明一个对象,假设是空的,会占据内存哦,请看:
class aaa{
private:
public:
};
int main() {
aaa b;
cout << sizeof(b);
}
相关解释在geeksforgeeks有,不再赘述,参考我的博客即可
方式1-类内部定义成员及函数
class Student{
public:
char *name;
int age;
public:
void print(){
printf("%s--%d",name,age);
}
protected:
private:
};
方式2-类内部定义成员外部定义函数
class Student{
public:
char *name;
int age;
public:
void print();
protected:
private:
};
void Student::print(){
printf("%s--%d",name,age);
}
inline 内联函数
在类内和类外定义函数是有区别的,类之内定义为内联成员,之外定义不是。
首先,在类之内定义的函数默认为内联函数,而在之外如果需要变成内联函数,可以在之前加入inline关键字
记好,所谓定义是指后面写了大括号
void print(){}
而声明仅仅是 void print();
class Student{
public:
char *name;
int age;
public:
inline void print();
protected:
private:
};
void Student::print(){
printf("%s--%d",name,age);
}
这样子,即使函数在类之外定义,print()也成为内联函数
- 超链接: c++内联函数详细讲解
1.3类成员的访问权限
C++通过public、protected、private三个关键字控制成员变量和成员函数的访问权限。
在类之内定义,都是可以互相访问,没有限制
在类之外定义无法访问private和protected属性的成员变量和成员函数,仅仅可以访问public属性的成员变量和成员函数。
代码块
#include "iostream"
#include "vector"
#include "string"
#include "queue"
#include "algorithm"
#include "unordered_map"
#include "stack"
using namespace std;
class student{
public:
void setname(char *name1){
name=name1;
}
void setage(int age1){
age=age1;
}
void setscore(float score1) {
score=score1;
}
void say(){
printf("%s--%d--%f",name,age,score);
}
protected:
private:
char *name;
int age;
float score;
};
int main(){
student s1;
s1.setname("wer");
s1.setage(43);
s1.setscore(33.9);
s1.say();
return 0;
}
1.4成员函数的重载及参数缺省
C++函数可以设置缺省值,设置之后,函数调用的时候可以忽略。但是一旦设置之后,后面的参数也必须设置为缺省值。
#include "iostream"
#include "algorithm"
using namespace std;
int sum(int x=0,int y=100,int z=0){
return x+y+z;
}
int main(){
cout<<sum()<<endl;
cout<<sum(6)<<endl;
cout<<sum(6,10)<<endl;
cout<<sum(6,10,20)<<endl;
return 0;
}
重载:重载时指两函数具有相同的函数名,但其中参数的类型或者个数不同,进行再定义,他们仍然是不同的函数。
#include "iostream"
#include "algorithm"
using namespace std;
class Location{
public:
void init(int x=0,int y=0);
void valueX(int val){
x=val;
}
int valueX(){
return x;
}
protected:
private:
int x,y;
};
void Location::init(int a,int b){
x=a;y=b;
}
int main(){
Location A;
A.init(99);
A.valueX(6);
cout<<A.valueX()<<endl;
}
输出:
6
但是,要注意使用函数缺省值时候避免函数重载的二义性
举例:
#include "iostream"
#include "algorithm"
using namespace std;
class Location{
public:
void init(int x=0,int y=0);
void valueX(int val=0){
x=val;
}
int valueX(){
return x;
}
protected:
private:
int x,y;
};
void Location::init(int a,int b){
x=a;y=b;
}
int main(){
Location A;
A.init(99);
A.valueX(6);
cout<<A.valueX()<<endl;
}
编译出错