C++对象与继承使用中一些问题介绍

 更新时间:2022年01月02日 09:50:23   作者:IceFlame31  
大家好,本篇文章主要讲的是C++对象与继承使用中一些问题介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览

定义抽象类

class Person {
public:
	virtual void born() = 0;
};

类的继承

class Man :public Person {
public:
	void born() {
		cout << " 出生了一个男人" << endl;
	}
};

使用new关键字实例化对象,只能用指针变量来接收

因此,在对象的实例化,作为函数的参数和返回值时,都用要使用指针

Person* generatePersion(Person* person1) {
	Person* person = new Man();
	retrun person;
}

使用普通的对象属性及方法时使用.来引用,但是用指针表示的对象则使用->

Student stu1("张三",18,"北京");  // 直接用变量实例化对象
Student *stu2 = new Student("李四",20,"上海");  // 通过指针实例化对象
stu1.study();
stu2->study();

定义类的时候,属性需要赋初始值的请况

class StudentId {
private:
	static StudentId* si;  // 必须用static修饰
	static string id;  // 必须用static修饰
};
string StudentId::id = "20200001";
StudentId* StudentId::si = NULL;

类的前置声明

c++在使用这个类之前,必须要定义这个类,不然编译器不知道有这个类
因此,当两个类互相嵌套时,可能会报错,解决的方法就是使用前置声明
如果在类的方法实现过程中,还用到了另一个类的相关方法
那么最好是将类方法的定义和实现分开写

class AbstractChatroom;  // 类的前置声明

class Member{
protected:
    AbstractChatroom *chatroom;  // 使用之前必须先定义
    void setChatroom(AbstractChatroom *chatroom) {  // 类方法可以在类定义的时候就实现
        this->chatroom = chatroom;
    }
    void chatroom_play();  // 当方法内部需要使用到前置声明类中的方法时,只能先定义,后实现
};

class AbstractChatroom{  // 类的具体定义
public:
	Member member;  // 类的相互嵌套
    virtual void sendText(string from,string to,string message) = 0;
    void play(){
		cout << "在聊天室里玩耍!" << enld;
	}
};

void Member::chatroom_play(){  // 类方法的具体实现
	chatroom -> play();
}

命名空间的使用

#include <iostream>
using namespace std;

namespace my_namespace{  // 定义命名空间

class Student{  // 命名空间中的对象
public:
	string name;
	int age;
	string home;
	Student(string name, int age, string home);
	string getName();
	int getAge();
	string getHome();
	void setName(string name);
	void setAge(int age);
	void setHome(string home);
};
Student::Student(string name, int age, string home){
    this -> name = name;
    this -> age = age;
    this -> home = home;
}
string Student::getName(){
    return name;
}
int Student::getAge(){
    return age;
}
string Student::getHome(){
    return home;
}
void Student::setName(string name){
    this -> name = name;
}
void Student::setAge(int age){
    this -> age = age;
}
void Student::setHome(string home){
    this -> home = home;
}

}

// 使用命名空间,方法1
using namespace my_namespace;
int main(){
	Student *stu1 = new Student(" 张三", 18, "北京");
	cout << stu1 -> getName() << endl;
}

// 使用命名空间,方法2
int main(){
	my_namespace::Student *stu1 = new my_namespace::Student(" 张三", 18, "北京");
	cout << stu1 -> getName() << endl;
}

总结

到此这篇关于C++对象与继承使用中一些问题介绍的文章就介绍到这了,更多相关C++对象与继承内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++小知识:用++i替代i++

    C++小知识:用++i替代i++

    今天小编就为大家分享一篇关于C++小知识:用++i替代i++,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • C++类与对象深入之运算符重载与const及初始化列表详解

    C++类与对象深入之运算符重载与const及初始化列表详解

    运算符是程序中最最常见的操作,例如对于内置类型的赋值我们直接使用=赋值即可,因为这些编译器已经帮我们做好了,但是对象的赋值呢?能直接赋值吗
    2022-06-06
  • Cocos2dx实现数字跳动效果

    Cocos2dx实现数字跳动效果

    这篇文章主要为大家详细介绍了Cocos2dx实现数字跳动效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-09-09
  • 利用C语言结构体实现通讯录

    利用C语言结构体实现通讯录

    这篇文章主要为大家详细介绍了利用C语言结构体实现通讯录,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • C语言 超详细介绍与实现线性表中的无头单向非循环链表

    C语言 超详细介绍与实现线性表中的无头单向非循环链表

    无头单向非循环链表:结构简单,一般不会单独用来存数据。实际中更多是作为其他数据结构的子结构,如哈希桶、图的邻接表等等。另外这种结构在笔试面试中出现很多
    2022-03-03
  • C语言--数字交换题目详解

    C语言--数字交换题目详解

    本文通过代码给大家介绍c语言数字交换的题目,通过实例代码给大家讲解的很详细,具有一定的参考借鉴价值,对c语言感兴趣的朋友一起看看吧
    2021-08-08
  • C语言实现简易文本编辑器

    C语言实现简易文本编辑器

    这篇文章主要为大家详细介绍了C语言实现简易文本编辑器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05
  • 基于C语言利用哈夫曼树实现文件压缩的问题

    基于C语言利用哈夫曼树实现文件压缩的问题

    哈夫曼编码是一种编码方式,又称“霍夫曼编码”,其是可变字长的编码(VCL)的一种,这篇文章主要介绍了基于C语言利用哈夫曼树实现文件压缩,需要的朋友可以参考下
    2021-08-08
  • Qt QChart实现折线图的绘制

    Qt QChart实现折线图的绘制

    QChart是常用的图表,这篇文章主要为大家详细介绍了Qt如何利用QChart实现折线图的绘制,文中的示例代码讲解详细,感兴趣的可以了解一下
    2023-04-04
  • C语言函数基础教程分类自定义参数及调用示例详解

    C语言函数基础教程分类自定义参数及调用示例详解

    这篇文章主要为大家介绍了C语言函数的基础教程,主要包含C语言函数的分类,C语言函数自定义,C语言函数的参数及C语言函数的调用示例详解,有需要的朋友可以借鉴参考下
    2021-11-11

最新评论